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进行投诉反馈,一经查实,立即删除!