GO语言结构体的定义和使用
结构体使用关键字 type 定义,关键字 type 能将各种基本类型定义为自定义类型,基本类型包括整型、字符串、布尔型等。
结构体是一种复合的基本类型,它里面的成员(也可以称为元素或字段)可以是任意数据类型,所以需要使用 type 定义结构体,其语法格式如下:
根据结构体的定义语法,我们定义结构体 person,分别设置成员 name 和 age,示例如下:
运行上述代码,运行结果为:
结构体是一种复合的基本类型,它里面的成员(也可以称为元素或字段)可以是任意数据类型,所以需要使用 type 定义结构体,其语法格式如下:
type name struct { field1 dataType field2 dataType ... }语法说明如下:
- 关键字 type 设置当前定义的变量为自定义类型。
- name 是结构体名字,可自行命名。
- 关键字 struct 声明当前变量为结构体类型。
- field1 和 field2 是结构体的成员(也可以称为元素或字段),成员名字自行命名。
- dataType 用于设置每个成员的数据类型。
根据结构体的定义语法,我们定义结构体 person,分别设置成员 name 和 age,示例如下:
// 定义结构体person type person struct { name string age int }结构体定义后,下一步是对结构体进行实例化,实例化是对结构体的成员赋予具体真实的数值,使其能客观反映真实事物,实例化过程如下:
package main import "fmt" // 定义结构体person type person struct { name string age int } func main() { // 实例化方法1 // 实例化结构体person,生成实例化变量p p := person{name: "Tom", age: 18} // 由实例化变量p访问成员 fmt.Printf("结构体成员name的值:%v\n", p.name) fmt.Printf("结构体成员age的值:%v\n", p.age) // 实例化方法2 // 实例化结构体 var p1 person // 对结构体成员进行赋值操作 p1.name = "Tim" p1.age = 22 // 由实例化变量p1访问成员 fmt.Printf("结构体成员name的值:%v\n", p1.name) fmt.Printf("结构体成员age的值:%v\n", p1.age) // 实例化方法3 // 使用new()实例化结构体 p3 := new(person) // 对结构体成员进行赋值操作 p3.name = "LiLy" p3.age = 28 // 由实例化变量p3访问成员 fmt.Printf("结构体成员name的值:%v\n", p3.name) fmt.Printf("结构体成员age的值:%v\n", p3.age) // 实例化方法4 // 取结构体实例化的内存地址 p4 := &person{} // 对结构体成员进行赋值操作 p4.name = "Mary" p4.age = 16 // 由实例化变量p4访问成员 fmt.Printf("结构体成员name的值:%v\n", p4.name) fmt.Printf("结构体成员age的值:%v\n", p4.age) }上述代码列出了结构体的 4 种实例化方法,每一种实例化方法说明如下:
- 实例化方法 1 是在结构体实例化的时候为每个成员设置相应数值,如果没有为某个成员设置数值,则使用默认值,如 p := person{name: "Tom"} 没有为成员 age 设置数值,那么成员 age 的初始值为 0。
- 实例化方法 2 定义结构体变量 p1,结构体变量 p1 也是结构体的实例化变量,在结构体变量 p1 后面使用实心点访问成员,如 p1.name、p1.age,被访问的成员可以执行取值或赋值操作,如 p1.name="Tim" 是赋值操作,a:=p1.age 是取值操作。
- 实例化方法 3 使用内置函数方法 new() 对结构体进行实例化,然后在结构体实例化变量后面使用实心点访问成员。
- 实例化方法 4 取结构体实例化变量的内存地址并赋予变量 p4,再由变量 p4 使用实心点访问结构体成员。
运行上述代码,运行结果为:
结构体成员name的值:Tom 结构体成员age的值:18 结构体成员name的值:Tim 结构体成员age的值:22 结构体成员name的值:LiLy 结构体成员age的值:28 结构体成员name的值:Mary 结构体成员age的值:16综上所述,结构体使用 type name struct{xxx} 方法定义,在已定义的结构体名字后面加上中括号就能实现结构体实例化,在中括号里面使用键值对形式设置每个成员的初始值,若没有设置初始值,Go 语言为该成员设置相应默认值。