文章目录
目录
1、由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成,结合new(T)函数创建结构体指针
peo := new(People)
//因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间
fmt.Println(peo == nil) //输出:false
//由于结构体中属性并不是指针类型,所以可以直接调用
peo.Name = "jeff"
fmt.Println(peo)//输出:&{jeff 0}
peo1:=peo
peo1.Name="高级语言"
fmt.Println(peo1,peo)//输出:&{高级语言 0} &{高级语言 0}
2、如果不想使用new(T)函数,可以直接声明结构体指针并赋值
//声明结构体指针
var peo *People
//给结构体指针赋值
peo = &People{"jeff", 18}
/*
上面代码使用短变量方式如下
peo:= &People{"jeff", 18}
*/
fmt.Println(peo)
3、结构体指针比较的是地址,*结构体指针取出地址中对应的值
p1 := People{"jeff", 18}
p2 := People{"jeff", 18}
fmt.Printf("%p %pn", &p1, &p2) //输出地址不同
fmt.Println(p1 == p2) //输出:true
p3 := new(People)
p3 = &People{"jeff", 17}
//结构体变量不能和指针比较,使用*指针取出地址中值
fmt.Println(p1 == *p3) //输出:true
p4 := &People{"jeff", 17}
//指针比较的是地址
fmt.Println(p3 == p4) //输出:false
到此这篇关于golang结构体指针的实现的文章就介绍到这了,更多相关golang结构体指针内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Go结构体指针引发的值传递思考分析
- 一文带你了解Go语言中的指针和结构体
- go语言结构体指针操作示例详解
- Go语言中结构体方法副本传参与指针传参的区别介绍
- Go语言指针访问结构体的方法