Go语言结构体的定义和使用(非常详细)
Go 语言的数组只能存储同一类型的数据。要为不同项定义不同的数据类型应该如何使用 Go 语言处理呢?为此,Go语言提出了结构体的概念。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体表示一项记录,例如,保存 4S 店在售汽车的信息,每辆车都有品牌、颜色、出厂日期和价格等属性。
大多数编程语言都使用 class 关键字定义类,但在 Go 语言中没有“类”的概念。它使用更加灵活的“结构体”代替传统的“类”。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,每项数据都是结构体的一个成员。
在 Go 语言中,数组和切片可以存储同一类型的数据,而在结构体中可以为不同成员定义不同的数据类型。结构体成员也称为元素或字段,它有以下两个特性:
定义表示个人简介的结构体 profile,其中包括成员 name、age 和 interest,分别表示姓名、年龄和兴趣爱好。代码如下:
例如,使用该方法实例化 profile 结构体,并访问结构体的成员,代码如下:
没有为某个成员设置值时,该成员使用默认值。例如,在实例化 profile 结构体时只设置成员 name 和 interest 的值,代码如下:
例如,实例化结构体 profile,并为结构体成员赋值,再访问结构体的成员,关键代码如下:
例如,使用该方法实例化结构体 profile,然后对结构体成员进行赋值,再访问结构体的成员,关键代码如下:
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体表示一项记录,例如,保存 4S 店在售汽车的信息,每辆车都有品牌、颜色、出厂日期和价格等属性。
大多数编程语言都使用 class 关键字定义类,但在 Go 语言中没有“类”的概念。它使用更加灵活的“结构体”代替传统的“类”。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,每项数据都是结构体的一个成员。
在 Go 语言中,数组和切片可以存储同一类型的数据,而在结构体中可以为不同成员定义不同的数据类型。结构体成员也称为元素或字段,它有以下两个特性:
- 成员有自己的类型和值,可以是任意数据类型;
- 成员名必须唯一。
Go语言结构体的定义
定义结构体使用 type 和 struct 关键字。定义结构体的基本语法格式如下:type name struct { member datatype member datatype ... }参数说明如下:
- type:用于自定义类型的关键字;
- name:定义的结构体名称;
- struct:声明为结构体类型;
- member:结构体的成员名;
- datatype:成员的数据类型。
定义表示个人简介的结构体 profile,其中包括成员 name、age 和 interest,分别表示姓名、年龄和兴趣爱好。代码如下:
type profile struct { name string age int interest []string }
Go语言结构体的实例化
定义结构体之后,还要实例化才能使用结构体中的成员。实例化就是为结构体中的成员赋值。在 Go语言中,结构体有多种实例化方法,根据实际需要可以选用不同的方法。1) 在结构体名称后直接赋值
在结构体名称后面使用大括号进行实例化,同时为每个成员设置值。例如,使用该方法实例化 profile 结构体,并访问结构体的成员,代码如下:
package main import ( "fmt" ) type profile struct { name string age int interest []string } func main() { p1 := profile{name: "Tony", age: 20, interest: []string{"运动", "旅游", "看电影"}} //访问成员 fmt.Printf("姓名:%v\n", p1.name) fmt.Printf("年龄:%v\n", p1.age) fmt.Printf("兴趣爱好:%v\n", p1.interest) }运行结果如下:
姓名:Tony
年龄:20
兴趣爱好:[运动 旅游 看电影]
访问结构体成员需要使用点(.)操作符,格式为“结构体实例名称.成员名”。
没有为某个成员设置值时,该成员使用默认值。例如,在实例化 profile 结构体时只设置成员 name 和 interest 的值,代码如下:
p1 := profile{name: "Tony", interest: []string{"运动", "旅游", "看电影"}}再次运行程序,成员 age 的值显示为 0。
2) 定义结构体变量再赋值
结构体本身也是一种类型,可以使用 var 关键字声明结构体的方式完成实例化。例如,实例化结构体 profile,并为结构体成员赋值,再访问结构体的成员,关键代码如下:
func main() { var p2 profile //实例化结构体 //对结构体成员赋值 p2.name = "Tony" p2.age = 20 p2.interest = []string{"运动", "旅游", "看电影"} //访问成员 fmt.Printf("姓名:%v\n", p2.name) fmt.Printf("年龄:%v\n", p2.age) fmt.Printf("兴趣爱好:%v\n", p2.interest) }在上述代码中,p2 即创建的结构体实例。运行结果为:
姓名:Tony
年龄:20
兴趣爱好:[运动 旅游 看电影]
3) 使用new()函数实例化
使用 Go 语言内置的 new() 函数也可以实例化结构体。使用这种方式创建的结构体实例是指针类型。例如,使用该方法实例化结构体 profile,然后对结构体成员进行赋值,再访问结构体的成员,关键代码如下:
func main() { p3 := new(profile) //实例化结构体 //对结构体成员赋值 p3.name = "Tony" p3.age = 20 p3.interest = []string{"运动", "旅游", "看电影"} //访问成员 fmt.Printf("姓名:%v\n", p3.name) fmt.Printf("年龄:%v\n", p3.age) fmt.Printf("兴趣爱好:%v\n", p3.interest) }运行结果为:
姓名:Tony
年龄:20
兴趣爱好:[运动 旅游 看电影]
4) 取结构体的地址进行实例化
使用取地址操作符“&”实例化结构体。使用该方法实例化结构体 profile 的关键代码如下:func main() { p4 := &profile{} //实例化结构体 //对结构体成员赋值 p4.name = "Tony" p4.age = 20 p4.interest = []string{"运动", "旅游", "看电影"} //访问成员 fmt.Printf("姓名:%v\n", p4.name) fmt.Printf("年龄:%v\n", p4.age) fmt.Printf("兴趣爱好:%v\n", p4.interest) }运行结果为:
姓名:Tony
年龄:20
兴趣爱好:[运动 旅游 看电影]