一.结构体指针
- 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成
可以结合new(T)函数创建结构体指针
peo := new(People)//因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间fmt.Println(peo == nil) //输出:false//由于结构体中属性并不是指针类型,所以可以直接调用peo.Name = "smallming"fmt.Println(peo)//输出:&{smallming 0}peo1:=peopeo1.Name="佳明哥"fmt.Println(peo1,peo)//输出:&{佳明哥 0} &{佳明哥 0}
如果不想使用new(T)函数,可以直接声明结构体指针并赋值
//声明结构体指针var peo *People//给结构体指针赋值peo = &People{"smallming", 17}/*上面代码使用短变量方式如下peo:= &People{"smallming", 17}*/fmt.Println(peo)
二.判断
- 结构体指针比较的是地址
(*结构体指针)取出地址中对应的值
p1 := People{"smallming", 17}p2 := People{"smallming", 17}fmt.Printf("%p %p\n", &p1, &p2) //输出地址不同fmt.Println(p1 == p2) //输出:truep3 := new(People)p3 = &People{"smallming", 17}//结构体变量不能和指针比较,使用*指针取出地址中值fmt.Println(p1 == *p3) //输出:truep4 := &People{"smallming", 17}//指针比较的是地址fmt.Println(p3 == p4) //输出:false
