1、定义
结构体(struct)是由一组字段(field)组成的类型(type),其内部的字段通过 点 进行访问。
1.1 定义如下
type person struct {
name string
age int
}
1.2 字段访问
通过 点 操作可以访问结构体内部的字段,常见的访问方式有:
- 通过结构体变量访问
- 通过指针访问
- 省去 * 的指针访问
举个栗子,注意变量p 和指针pt的用法
p := person{}
p.name = "李雷"
p.age = 12
pt := &p //创建一个指向 p 变量的指针 pt
(*pt).age = 13 //通过指针的方式访问结构体变量的字段
pt.name = "李二蛋" //省去了*,也可以访问
fmt.Println("李雷的新名字叫", p.name)
fmt.Println(pt.name, "在", (*pt).age, "岁的时候改的名字")
2、使用
结构体初始化常用的方式比较灵活,常见的用法有 结构体变量 和 结构体指针。
2.1 结构体变量
结构体变量的定义及使用如下:
- 按字段默认顺序赋值
- 每个字段赋值时,指定名字(顺序可以打乱,例如 变量p21)
- 指定名字,赋值部分字段,其他字段默认(例如,p3,p4)
- 所有字段使用默认值。(例如,p5)
package main
import "fmt"
type person struct {
name string
age int
}
func main() {
p1 := person{"李雷", 12} //按字段默认顺序赋值,不需指定字段名称
p2 := person{name: "李雷", age: 12} //每个字段赋值时都指定字段名称
p21 := person{age: 12, name: "李雷"} //打乱顺序的赋值,哈哈
p3 := person{name: "李雷"} //只赋值name,age默认为0
p4 := person{age: 10} //只赋值 age,name默认为空字符串
p5 := person{} //所有字段都使用默认值,类似java中调用无参构造函数进行初始化
fmt.Println(p1, p2, p21, p3, p4, p5)
}
2.2 结构体指针
因为结构体是一种类型,所以可以用指针指向结构。常见方法如下:
- 直接指向已经存在的结构体变量
- 直接定义一个结构体,并用指针指向它
package main
import "fmt"
type person struct {
name string
age int
}
func main() {
p := person{"李雷", 12} //按字段默认顺序赋值,不需指定字段名称
pt := &p //创建指针,指向 p
fmt.Println(*pt)
pt1 := &person{"韩梅梅", 11}//直接创建结构体,并用 pt1 指针指向它
fmt.Println(*pt1)
}