gpt4 book ai didi

go - 接口(interface)的结构嵌入, panic : runtime error

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:53 26 4
gpt4 key购买 nike

我正在尝试一个与接口(interface)的结构嵌入相关的示例

// 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 的类型:
(并且不要在 loopBack 中嵌入 net.Conn)

func main() {
var loop net.Conn = loopBack{}

关于go - 接口(interface)的结构嵌入, panic : runtime error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54407011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com