Go语言基础结构体用法及示例详解

 更新时间:2021年11月17日 10:29:00   作者:枫少文  
这篇文章主要为大家介绍了Go语言基础结构体的用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

概述

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合

语法

定义结构体【标识自定义结构体的名称,在同一个包内不能重复】

type 结构名 struct {
  字段1: 字段1的值,
  字段2: 字段2的值,
  ......
}

例子

//学生
type Student struct {
  Name string   //姓名
  Age int       //年龄
  Sex bool      //性别 true:男    false:女
}

结构体定义的三种形式

第一种【基本的实例化】

var stu Student

第二种【指针类型的结构体】

var stu *Student = new(Student)

第三种【取结构体的地址实例化,通过&的操作】

var stu *Student = &Student{}

初始化结构体

键值对初始化结构体

键值之间以:分隔;键值对之间以,分隔

变量名 := 结构体类型名{
    字段1: 字段1的值,
    字段2: 字段2的值,
    ......
}

例子

stu3 := Student{
  Name: "李四",
  Age: 18}

值列表填充结构体

没有字段,按着序列,必须全部填充

变量名 := 结构体类型名{
    字段1的值,
    字段2的值,
    ......
}

stu4 := Student{
  "王五",
  18,
  true,
}

匿名结构体

定义结构体时同时赋值

变量名 := struct{
    字段1: 字段类型1,
    字段2: 字段类型2,
    ......
}{
    // 字段值初始化
    字段1: 字段1的值,
    字段2: 字段2的值,
    ......
}

stu5 := struct {
  Name string
  Age  int
}{
  Name: "王五",
  Age:  18,
}

访问结构体成员

赋值、访问都使用"."点这个符号

结构体.字段

var stu Student
stu.Name="张三"         //赋值
stu.Age=18
stu.Sex=true

fmt.Println(stu.Age)   //访问

结构体作为函数参数

func 函数名([结构体变量、结构体指针变量]){}
func printStudent(stu Student) {}
func printStudent(stu *Student) {}

 结构体指针

使用结构体指针访问结构体成员,使用 “.” 操作符。

var 变量名 *结构名
var stu1 *Student = new(Student)
stu1.Name = "李四"
stu1.Age = 20
stu1.Sex = false

添加结构体方法

给结构体添加方法,在func和方法名之间加一个括号,加入该结构体的指针引用【也可以是值引用】

func ([结构体名]) 方法名([参数列表])[返回值列表]{}

例子

var stu Student
stu.Name = "张三"
stu.Age = 18
stu.Sex = false

//调用
stu.sayHi()

//添加结构体方法
func (stu Student) sayHi() {
	fmt.Println(stu.Name, "Hi")
}

总结

golang是非面向对象语言,也可以说go语言中的结构体类似java中的类,但是很明显缺少继承多态等等OO的特性

指针变量通过.访问结构体成员,如果是C或者C++一定要通过*访问,这是Go对它的一个优化

示例

package main
import "fmt"
//定义结构体【标识自定义结构体的名称,在同一个包内不能重复】
type Student struct {
	Name string
	Age  int
	Sex  bool
}
func main() {
	//struct定义的三种形式
	var stu Student
	stu.Name = "张三"
	stu.Age = 18
	stu.Sex = false
	fmt.Println(stu)
	var stu1 *Student = new(Student)
	stu1.Name = "李四"
	stu1.Age = 20
	stu1.Sex = false
	fmt.Println(stu1)
	var stu2 *Student = &Student{}
	stu2.Name = "王五"
	stu2.Age = 55
	stu2.Sex = true
	fmt.Println(stu2)
	//初始化结构体
	stu3 := Student{
		Name: "李四",
		Age:  18}
	fmt.Println(stu3)
	stu4 := Student{
		"王五",
		18,
		true,
	}
	fmt.Println(stu4)
	//匿名结构体
	stu5 := struct {
		Name string
		Age  int
	}{
		Name: "王五",
		Age:  18,
	}
	fmt.Println(stu5)
	// printStudent(stu)
	printStudent(stu1)
	stu.sayHi()
}
//添加结构体方法
func (stu Student) sayHi() {
	fmt.Println(stu.Name, "Hi")
}
// func printStudent(stu Student) {
// 	fmt.Println(stu.Name, stu.Age, stu.Sex)
// }
func printStudent(stu *Student) {
	fmt.Println(stu.Name, stu.Age, stu.Sex)
}

以上就是Go语言基础结构体用法及示例详解的详细内容,更多关于Go语言结构体的资料请关注脚本之家其它相关文章!

相关文章

  • go语言 http模型reactor示例详解

    go语言 http模型reactor示例详解

    这篇文章主要介绍了go语言 http模型reactor,接下来看一段基于reactor的示例,这里运行通过 go run main.go,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 详解Golang中select的使用与源码分析

    详解Golang中select的使用与源码分析

    select 是 Go 提供的 IO 多路复用机制,可以用多个 case 同时监听多个 channl 的读写状态。本文将从源码角度带大家了解一下select的使用,需要的可以参考一下
    2022-12-12
  • go连接mysql的项目实践

    go连接mysql的项目实践

    本文主要介绍了go连接mysql的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go 语言入门学习之时间包

    Go 语言入门学习之时间包

    这篇文章主要介绍了Go 语言入门学习之时间包,GO 语言提供了 ​​time​​包来测量和显示时间,下文关于GO时间包的相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • Go语言库系列之dotsql详解

    Go语言库系列之dotsql详解

    这篇文章主要介绍了Go语言库系列之dotsql的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Air实现Go程序实时热重载使用过程解析示例

    Air实现Go程序实时热重载使用过程解析示例

    这篇文章主要为大家介绍了Air实现Go程序实时热重载使用过程解析示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Go语言中反射的正确使用

    Go语言中反射的正确使用

    Go本身不支持模板,因此在以往需要使用模板的场景下往往就需要使用反射(reflect). 反射使用多了以后会容易上瘾,有些人甚至会形成一种莫名其妙的鄙视链。下面这篇文章就给大家介绍了如何正确使用Go语言中的反射以及在使用前的注意,有需要的朋友们下面来一起看看吧。
    2016-12-12
  • Go设计模式之单例模式图文详解

    Go设计模式之单例模式图文详解

    单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点,本文就通过图文给大家介绍一下Go的单例模式,需要的朋友可以参考下
    2023-07-07
  • Go语言状态机的实现

    Go语言状态机的实现

    本文主要介绍了Go语言状态机的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • golang实现微信小程序商城后台系统(moshopserver)

    golang实现微信小程序商城后台系统(moshopserver)

    这篇文章主要介绍了golang实现微信小程序商城后台系统(moshopserver),本文通过截图实例代码的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02

最新评论