golang结构体指针的实现
更新时间:2025年06月23日 10:30:45 作者:longzhoufeng
这篇文章主要介绍了golang结构体指针的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
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 %p\n", &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结构体指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Golang中的[]byte与16进制(String)之间的转换方式
这篇文章主要介绍了Golang中的[]byte与16进制(String)之间的转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-11-11
Go1.18 新特性之多模块Multi-Module工作区模式
这篇文章主要介绍了Go1.18 新特性之多模块Multi-Module工作区模式,在 Go 1.18之前,建议使用依赖模块中的 replace 指令来处理这个问题,从 Go 1.18开始引入了一种同时处理多个模块的新方法,通过案例给大家详细介绍,感兴趣的朋友一起看看吧2022-04-04
golang通用的grpc http基础开发框架使用快速入门
这篇文章主要为大家介绍了golang通用的grpc http基础开发框架使用快速入门详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09
Go语言中io.Reader和io.Writer的详解与实现
在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。在使用Go语言的过程中,无论你是实现web应用程序,还是控制台输入输出,又或者是网络操作,不可避免的会遇到IO操作,使用到io.Reader和io.Writer接口。下面来详细看看。2016-09-09


最新评论