我是戈朗的新手。我从 go 之旅开始。这是go playground 链接
这是代码:
package main
import "fmt"
type I interface {
M()
}
type T struct {
S string
}
func (t *T) M() {
fmt.Println(t.S)
}
func main() {
var i I
var t *T
i = t
i.M()
}
它很恐慌
恐慌:运行时错误:无效内存地址或零指针取消引用[信号 SIGSEGV:分段违规代码=0xffffffff 地址=0x0 pc=0xd3ea6] goroutine 1 [运行]:main.(*T).M(0x0, 0x434070) /tmp/ sandbox696069628/main.go:15 +0x26 main.main() /tmp/sandbox696069628/main.go:24 +0x40
但是当我改变
var t *T
i = t
到
var t T
i = &t
它不再恐慌
在这两种情况下,行为不应该相似吗?如果不是,为什么?
ABOUTYOU
哆啦的时光机
相关分类