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
- Go语言的结构嵌入问题
- Go语言嵌入问题续
- go语言有关结构体的问题
- Go语言的类型结构
- Go语言结构示例
- Go 语言结构
- Go 语言结构体
- Go 语言结构体
- go语言结构体
- 2.GO 语言结构
- Go语言-结构体
- GO语言结构体
- 1.Go语言结构
- GO 语言结构体
- Go语言结构体
- Go语言 几个亟待解决的Go语言问题
- Go 语言编译运行的小问题
- go语言 最近遇到的问题总结
- hihoCoder1040 : 矩形判断
- JDK/SDK
- swagger 注释
- smart_pointer
- 程序员面试金典——集合的子集______
- Go语言的结构嵌入问题
- 盘点在H5小游戏里常用的动效制作套路
- windows小技巧1——路径太长导致文件无法删除
- Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一)
- 关于CDN网络分发的工作机制
- 矢量图形引擎库VectorDraw Developer Framework 更新至v7.7011.0.4
- javascript根据元素自定义属性获取元素,操作元素
- yum命令
- android:clipChildren属性的用法