我正在尝试一个与接口的结构嵌入有关的示例

// 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/

10-09 15:18