【发布时间】:2022-01-03 11:01:38
【问题描述】:
我有一个关于 go 接口使用的问题。我还在学习这门语言,所以如果这是一个愚蠢的问题,请原谅我。
我正在玩一个接受和处理 TCP 连接的小应用程序。因为我想测试业务逻辑而不是网络魔法,所以我试图使用接口保持一点抽象(这样我就可以使用简单的io.ReadWriteCloser 对象来模拟 net.Conn 对象)。
这是我的问题:
type Accepter interface {
Accept() (io.ReadWriteCloser, error)
}
func NewTCPAccepter(address string) (Accepter, error) {
accepter, err := net.Listen("tcp", address)
if err != nil {
return nil, err
}
return accepter, err
}
我看到的错误是:
net.Listener does not implement Accepter (wrong type for Accept method)
have Accept() (net.Conn, error)
want Accept() (io.ReadWriteCloser, error)
我不明白为什么会这样,因为检查文档和 net lib 源代码,我看到 net.Conn 实际上是在实现 io.ReadWriteCloser。
我的错误是什么?非常感谢!
【问题讨论】:
-
您的
Accepter“规定”返回类型为io.ReadWriteCloser。net.Listener.Accept()返回net.Conn。类型必须完全匹配。
标签: go network-programming go-interface