Go似乎沒有強制結構堅持接口。爲什麼下面的代碼編譯? 爲什麼Go允許我調用未實現的方法?
package main
type LocalInterface interface {
SomeMethod(string) error
SomeOtherMethod(string) error
}
type LocalStruct struct {
LocalInterface
myOwnField string
}
func main() {
var localInterface LocalInterface = &LocalStruct{myOwnField:"test"}
localInterface.SomeMethod("calling some method")
}
看起來這不應該編譯,因爲SomeMethod
未實現。 go build
沒有問題。
運行它導致在運行時錯誤:
> go run main.go
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x20 pc=0x4013b0]
goroutine 1 [running]:
panic(0x460760, 0xc08200a090)
C:/Go/src/runtime/panic.go:464 +0x3f4
main.(*LocalStruct).SomeMethod(0xc0820064e0, 0x47bf30, 0x13, 0x0, 0x0)
<autogenerated>:3 +0x70
main.main()
C:/Users/kdeenanauth/Documents/git/go/src/gitlab.com/kdeenanauth/structTest/main.go:16 +0x98
exit status 2
我已經忘記了這是一個隱藏字段和零指針異常非常有意義。感謝您爲說明修復引入了另一種類型的內容來完成界面! –