Go语言的结构嵌入问题

来源:互联网 发布:高德端口修改器 v33 编辑:程序博客网 时间:2024/05/16 14:11

最近使用Go语言遇到点问题,
首先讲几个前提:
1.写一个接口I
2.一个struct实现了接口I,设为A
3.另一个struct中直接嵌入了A,设为B
4.A中有自己的成员变量,设为j,是个指针
5.A有一个init方法用来初始化j指针
6.接口I中包含init方法
7.接口I中包含一个use方法,该方法中调用了j

然后有
var b B
var i I
i=b

则,

i.init()后,本来以为j初始化了,于是

i.use(),就出现问题,说空指针

package mainimport ("fmt")type I interface{    use()    init()}type A struct{    j *int}func (a A)use(){    fmt.Println(*a.j+2)}func (a A)init(){    var i int=2    a.j=&i}type B struct{    A}func main(){    var i I    b:=B{}    i=b    i.init()    i.use()}

运行结果:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x48899d]

goroutine 1 [running]:
main.A.use(0x0)
C:/Users/huanr/go/src/t5/t5.go:14 +0x2d
main.B.use(0x0)
:7 +0x48
main.main()
C:/Users/huanr/go/src/t5/t5.go:31 +0x46

后来发现这段代码不用接口也会出现一样的错误

新代码如下

package mainimport ("fmt")type A struct{    j *int}func (a A)use(){    fmt.Println(*a.j+2)}func (a A)init(i *int){    a.j=i}func main(){    a:=A{}    var k int=2    a.init(&k)    a.use()}

问题依旧存在

0 0
原创粉丝点击