I15*_*159 1 methods interface go django-inheritance
我想知道,是否可以扩展现有接口?有一个简单的代码片段不起作用.
包主
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
}
Run Code Online (Sandbox Code Playgroud)
list [0] .A undefined(类型io.ReaderAt没有字段或方法A)
这是告诉我不能从不同的包实现接口的方法吗?
它只告诉你io.ReaderAt没有A()方法.
你需要一个类型断言得到*Aaa了的io.ReaderAt.
a := io.ReaderAt(&Aaa{})
if a, ok := a.(*Aaa); ok {
a.A()
}
Run Code Online (Sandbox Code Playgroud)
接口不需要在任何特定的地方定义,因此如果您的代码需要ReaderAtA使用这些方法,您可以自己定义它,任何ReaderAtA值也可以是io.ReaderAt
type ReaderAtA interface {
io.ReaderAt
A()
}
a := ReaderAtA(&Aaa{})
a.A()
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/0bl5djJ0im
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |