go的结构体作为返回值
2023-12-13 05:45:15
结构体有两种方式作为返回值
- 结构体
- 结构体指针
代码
package main
import (
"fmt"
)
type SS struct {
Name string
Age int
}
func getInfo() (*SS) {
var ac = SS{}
ac.Age = 1
return &ac
}
func getInfo1() (aa *SS) {
aa.Age = 1
return
}
func getInfo2() (SS) {
var ac = SS{}
ac.Age = 1
return ac
}
func main() {
//var dd *SS
//var dd = &SS{}
var dc = &SS{}
dc = getInfo()
fmt.Println(dc.Age)
var df = SS{}
df = getInfo2()
fmt.Println(df.Age)
var dd = &SS{}
dd = getInfo1()
fmt.Println(dd.Age)
}
结果:
1
1
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x47ae8f]
goroutine 1 [running]:
main.getInfo1(...)
/home/zhaoky/Desktop/kaiyue/aa/f.go:19
main.main()
/home/zhaoky/Desktop/kaiyue/aa/f.go:41 +0xaf
分析
1、getinfo() 结构体指针 需要在返回的结构体在函数外有实体
2、getinfo1() 结构体指针 即使在函数外有实体也会报错崩溃,是因为此时给返回的结构体指针声明了一个结构体指针,但这个结构体指针没有实体,在赋值时会报错
3、getinfo2() 结构体作为返回值 外层可以有实体也可以没有
文章来源:https://blog.csdn.net/qq_39852676/article/details/134960515
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!