结构体有两种方式作为返回值
- 结构体
- 结构体指针
代码
package mainimport ("fmt"
)type SS struct {Name stringAge int
}func getInfo() (*SS) {var ac = SS{}ac.Age = 1return &ac
}func getInfo1() (aa *SS) {aa.Age = 1return
}func getInfo2() (SS) {var ac = SS{}ac.Age = 1return 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() 结构体作为返回值 外层可以有实体也可以没有