Golang Go语言新手请教一个问题
代码如下:
package main
import “fmt”
type MyStruct struct {
Name string
*Person
}
type Person struct {
age int
}
func NewMyStruct(name string) *MyStruct {
return &MyStruct{
Name: name,
Person: &Person{
age: 18,
},
}
}
func main() {
p := NewMyStruct(“小王子”)
fmt.Printf(“p=%+v\n”, p)
}
我在为结构体的指针类型字段赋值时,输出后 Person 为什么是内存地址呢?
我的理解是 MyStruct 结构体中*Person 会解除指针引用取值输出 18.
Golang Go语言新手请教一个问题
更多关于Golang Go语言新手请教一个问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
也是新手,我看了下%+v 的描述说是输出数据的值,应该是 go 只对第一层结构体指针自动解对象了,内部包含的指针不会再继续解,请参考以下文章的后半部分,https://www.cnblogs.com/rxbook/p/16136202.html
go 的格式化打印遇上 v 打印,如果是指针会自动解一层
MyStruct 里面的*Person 是个类型,不是对类型的解引用 *只能解引用变量不能解引用类型
在 fmt.Printf 中使用 %+v 会打印出结构体的字段名称和值,但是它不会自动解引用指针。这就是为什么您看到的输出仍然是 Person 字段的内存地址。
为了在输出中展示 Person 结构体的内容,您可以使用自定义的 String() 方法为 MyStruct 实现 Stringer 接口。这样,当您打印 MyStruct 时,将按照您定义的 String() 方法来格式化输出。
请参考以下代码:<br>func (ms MyStruct) String() string {<br> return fmt.Sprintf("Name:%s Person:{age:%d}", <a target="_blank" href="http://ms.Name" rel="nofollow noopener">ms.Name</a>, ms.Person.age)<br>}<br>
为什么你们这么喜欢用指针,还有构造函数,醒醒,你都用 go 了
???我直接地铁老人问号
spew.dump
go 肯定要用指针啊,NewXxx 也不叫构造函数吧?
你好,很高兴看到你对Go语言感兴趣!作为IT营中专注于Go语言的专家,我很乐意解答你的问题。
对于新手来说,Go语言确实是一个值得学习的强大工具。它以其简洁、高效和并发处理能力而著称,非常适合构建高性能的网络服务和系统工具。
首先,我建议你从Go语言的官方文档和教程入手。这些资源提供了对语言特性的全面介绍,包括基础语法、数据类型、函数、控制结构等。通过阅读这些文档,你可以快速建立起对Go语言的基本认识。
接下来,你可以尝试编写一些简单的程序来实践所学内容。例如,编写一个计算斐波那契数列的程序,或者实现一个基本的HTTP服务器。这些实践项目不仅能帮助你巩固知识,还能让你对Go语言的并发处理能力有更直观的感受。
此外,参与Go语言的社区活动也是一个很好的学习方式。你可以加入相关的论坛、社交媒体群组或开源项目,与其他开发者交流心得、分享经验。这些社区资源不仅能为你提供技术支持,还能让你了解到Go语言的最新动态和发展趋势。
最后,记得保持耐心和持续学习的态度。Go语言虽然简洁,但也有一些复杂的特性和最佳实践需要时间去掌握。只要你不断实践、不断总结,相信你一定能够成为Go语言方面的专家。祝你学习愉快!