将接口切片转换为兼容的接口切片
实现包含重叠方法的不同接口可以提供编程灵活性。但是,将一个接口的一部分传递给需要不同但兼容的接口的函数可能会导致错误。让我们探讨如何在 Go 中解决这个问题。
假设我们有接口 A 和 B,其中 A 包含 B。A 的一个实现 Impl 满足 A 和 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 的切片传递给需要 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)
要解决这个问题,我们可以创建一个 []io.Reader 类型的新切片,并用 []A 中的元素填充它。这是绕过限制并确保不同但重叠的接口类型之间的兼容性的解决方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3