首页 > 后端开发 > Golang > 正文

Go中如何传递兼容接口的切片?

Mary-Kate Olsen
发布: 2024-10-25 06:01:02
原创
580 人浏览过

How to Pass Slices of Compatible Interfaces in Go?

在 Go 中传递兼容接口的切片

在 Go 中,将一个接口的切片传递给需要一个接口的切片的函数时可能会遇到困难不同的接口,即使前者包含后者。为了说明这个问题,考虑两个接口 A 和 B,其中 A 包含 B。

`
type A 接口 {

Close() error
Read(b []byte) (int, error)
登录后复制

}

type B interface {

Read(b []byte) (int, error)
登录后复制

}
`

具体来说,Impl struct 实现了两个接口:

`
type Impl struct {}
func (I Impl) Read(b []byte) (int, error) {

return 10, nil
登录后复制

}
func (I Impl) Close() error {

return nil
登录后复制

}
`

虽然单个项目可以毫无问题地跨函数传递,但传递切片会遇到错误:

`
func single(r io.Reader) {

fmt.Println("in single")
登录后复制

}
func slice(r []io.Reader) {

fmt.Println("in slice")
登录后复制

}

impl := &Impl{}
single(impl) / /works

list := []A{impl}
slice(list) // 失败
`

要解决此问题,您必须创建预期的新切片输入 ([]io.Reader) 并用源切片 ([]A) 中的元素填充它:

`
newSlice := make([]io.Reader, len(list))
for i, v := range list {

newSlice[i] = v
登录后复制

}
slice(newSlice)
`

这种方法允许您将一个接口的切片传递给函数期待另一个兼容接口的切片,解决了尝试直接传递原始切片时引发的错误。

以上是Go中如何传递兼容接口的切片?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板