我想知道,是否可以扩展现有接口(interface)?有一个简单的代码片段不起作用。
主要包
import (
"fmt"
"io"
)
type Aaa struct {}
// Implementing io.ReaderAt interface
func (a Aaa)ReadAt(p []byte, off int64) (n int, err error) {
return
}
// Extending it
func (a *Aaa) A() {
fmt.Println("A")
}
func main() {
list := [1]io.ReaderAt{Aaa{}} // Use Aaa object as io.ReaderAt type
list[0].A() //Trying to use an extended type. << Error occurred here
}
list[0].A undefined (type io.ReaderAt has no field or method A)
这是告诉我不能实现来自不同包的接口(interface)的一种方式吗?
最佳答案
它只是告诉您 io.ReaderAt
没有 A()
方法。
您需要类型断言才能从 io.ReaderAt
中获取 *Aaa
。
a := io.ReaderAt(&Aaa{})
if a, ok := a.(*Aaa); ok {
a.A()
}
接口(interface)不需要在任何特定的地方定义,所以如果你的代码需要一个带有这些方法的ReaderAtA
,你可以自己定义它,任何ReaderAtA
值也将是 io.ReaderAt
type ReaderAtA interface {
io.ReaderAt
A()
}
a := ReaderAtA(&Aaa{})
a.A()
关于go - 实现和扩展来自不同包的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682578/