我正在尝试一个与接口的结构嵌入有关的示例
// https://talks.golang.org/2014/go4java.slide#52
// Struct embedding of interfaces
// https://play.golang.org/p/SYiZ7M1OEhU
package main
import (
"bytes"
"fmt"
"net"
)
// net.Conn has Read and Write
type loopBack struct {
net.Conn
buf bytes.Buffer
}
func (c *loopBack) Read(b []byte) (int, error) {
fmt.Println("loopBack Read")
return 0, nil
}
func main() {
loop := loopBack{}
loop.Read(nil)
loop.Write(nil)
}
并且
Write
方法未定义,所以我得到了这个运行时错误panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0xe28ca]
goroutine 1 [running]:
main.main()
/tmp/sandbox812386031/main.go:28 +0x6a
是否存在某种在编译时对其进行验证的方法?
链接到代码
https://play.golang.org/p/SYiZ7M1OEhU
最佳答案
您在做什么与说“loopBack implements net.Conn
”不同。
要获取有关缺少的方法以及同样不匹配的Read()
的编译时错误,请声明loop
的类型:
(并且不要将 net.Conn
嵌入loopBack
)
func main() {
var loop net.Conn = loopBack{}
关于go - 接口(interface)的结构嵌入,出现紧急情况:运行时错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54407011/