登录
首页 >  Golang >  Go问答

请教go语言中struct变量和struct指针的区别

来源:SegmentFault

时间:2023-01-28 19:49:16 265浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《请教go语言中struct变量和struct指针的区别》,介绍一下go,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

go语言初学者, 在学习结构体指针的时候有些疑问, 首先定义一个结构体, 初始化结构体和它的结构体指针:

cat1 := Cat{"samy", 89.0}  
catPointer := &cat1  
  
catPointer.weight = 222  
fmt.Printf("%T \\n", cat1)  
fmt.Printf("%T \\n", catPointer)  
  
fmt.Println(cat1.weight)  
cat1.weight = 111  
fmt.Println(cat1.weight)

此时输出:

main.Cat 
*main.Cat 
222
111

此时变量

cat1
catPointer
类型是不同的, 这个我明白. 但是它们的区别是什么呢? 现在它们都可以对结构体的内容做出修改.

正确答案

感谢两位的回答, 但是我要的答案并不是那两个.
在上述例子中, 我想知道

cat1
catPointer
的区别, 为何他们类型不同, 却表现相同.
在go官方教程中有这样一段话:
To access the field
X
of a struct when we have the struct pointer
p
we could write
(*p).X
. However, that notation is cumbersome, so the language permits us instead to write just
p.X
, without the explicit dereference.

原文链接: https://tour.golang.org/moret...

也就是说, 在go语言操作结构体时候, 用上述例子来说, 就是

cat1
catPointer
类型是不同的, 但是在使用他们访问结构体的内存时, 会把
catPointer
当作
(*catPointer)
来操作, 那么这两个不同类型的变量就会出现表现相同, 类型不同的情况了.
下面用程序验证,下图可以看出他们两个类型确实不同:
Snipaste_2020-02-28_02-27-14.png

手动加上
*
之后,再次进行操作:
Snipaste_2020-02-28_02-46-23.png

答案就很明显了.
https://liqimore.com/2020/dif...

今天带大家了解了go的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表