登录
首页 >  Golang >  Go问答

嵌套在接口中的结构引发运行时错误

来源:stackoverflow

时间:2024-03-12 20:06:28 466浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《嵌套在接口中的结构引发运行时错误》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

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

// 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 实现 net.conn”不同。
要获取有关缺少方法以及不匹配的 read() 的编译时错误,请声明 loop 的类型:
(并且不要将 net.Conn 嵌入到 loopback 中)

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

以上就是《嵌套在接口中的结构引发运行时错误》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>