<分区>
我有两个接口(interface),A
和B
。碰巧 A
包含 B
。最后,我有一个 A
的具体实现(称之为 Impl
),根据定义,它也实现了 B
。
例如:
type A interface {
Close() error
Read(b []byte) (int, error)
}
type Impl struct {}
func (I Impl) Read(b []byte) (int, error) {
fmt.Println("In read!")
return 10, nil
}
func (I Impl) Close() error {
fmt.Println("I am here!")
return nil
}
由于A
需要Read()
,而Impl
实现了A
,所以也满足io .阅读器
.
如果我尝试跨函数传递单个项目,它工作正常。但是,如果我尝试将 A
的 slice 用于期望 io.Reader
的函数,它会失败。
例子:
func single(r io.Reader) {
fmt.Println("in single")
}
func slice(r []io.Reader) {
fmt.Println("in slice")
}
im := &Impl{}
// works
single(im)
// FAILS!
list := []A{t}
slice(list)
如果我可以将 A
传递给 single(r io.Reader)
,为什么我不能将 []A
传递给 slice(r []io.Reader)
,我该如何更正它?
实际实现在 https://play.golang.org/p/QOREQJTQhD只需取消注释 main()
中的最后两行,错误显示:
main.go:38: cannot use list (type []A) as type []io.Reader in argument to slice