go 语言学习笔记⑧----结构体
一种聚合的数据类型, 由一系列具有相同的数据类型或者不同的数据类型的数据结构构成的数据集合, 每个数据被称为结构体成员(自定义数据类型)
初始化
type 结构体名称 struct{内容}
type node struct {
l, r, sum int
}
顺序初始化
var 变量名 结构体名 = 结构体名{初始化变量}
func main() {
var a node = node{1, 2, 3}
fmt.Println(a)
//{1 2 3}
}
指定初始化
没有指定的值为0
func main() {
a := node{l: 2, sum: 3}
fmt.Println(a)
//{2 0 3}
}
结构体指针
var p *node = &node{}
func main() {
var a *node = &node{1, 2, 3}
fmt.Println(a)
//&{1 2 3}
}
单独操作成员
普通:使用**.**运算
指针:指针有合法指向后才能操作成员
func main() {
a := node{}
a.l = 1
a.r = 2
a.sum = 3
fmt.Println(a)
//{1 2 3}
b := node{4, 5, 6}
pb := &b
fmt.Println(pb)
//&{4 5 6}
}
通过new申请一个结构体
变量名 := new(结构体名)
返回一个结构体指针
func main() {
a := new(node)
fmt.Printf("%T", a)
//*main.node
}
做函数参数
值传递
引用传递
func test(a node) {
a.l = 14
}
func test1(a *node) {
a.l = 14
}
func main() {
a := node{1, 2, 3}
fmt.Println(a)
//{1 2 3}
test(a)
fmt.Println(a)
//{1 2 3}
b := node{4, 5, 6}
fmt.Println(b)
//{4 5 6}
test1(&b)
fmt.Println(b)
//{14 5 6}
}