peo := new(People)
//因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间
fmt.Println(peo == nil) //输出:false
//由于结构体中属性并不是指针类型,所以可以直接调用
peo.Name = "smallming"
fmt.Println(peo)//输出:&{smallming 0}
peo1:=peo
peo1.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
", &p1, &p2) //输出地址不同
fmt.Println(p1 == p2) //输出:true
p3 := new(People)
p3 = &People{"smallming", 17}
//结构体变量不能和指针比较,使用*指针取出地址中值
fmt.Println(p1 == *p3) //输出:true
p4 := &People{"smallming", 17}
//指针比较的是地址
fmt.Println(p3 == p4) //输出:false