英文:
Loop over array of items that implement an interface
问题
假设我有一个实现了接口Reader
的项目数组:
var items []Foo
我该如何将这些项目传递给接受读取器的函数?
func myFunction(items []Reader) { ... }
我不能使用类型[]Reader
,因为会出现以下错误:
无法将类型`[]Foo`用作类型`[]Reader`...
为了解决这个问题,你可以使用类型转换将[]Foo
转换为[]Reader
。你可以通过遍历items
数组,并将每个元素转换为Reader
类型,然后将它们添加到新的[]Reader
数组中。下面是一个示例代码:
var readers []Reader
for _, item := range items {
readers = append(readers, item)
}
myFunction(readers)
这样,你就可以将items
数组中的元素传递给接受[]Reader
类型参数的函数了。
英文:
Suppose I have an array of items that implement an interface Reader
:
var items []Foo
How would I pass these items into a function that takes readers?
func (items []Reader) { ... }
I can't use the type []Reader
because I get an error like:
Cannot use type `[]Foo` as type `[]Reader`...
答案1
得分: 2
例如,
package main
import (
"bytes"
"io"
)
var items []*bytes.Buffer
func f(items []io.Reader) {}
func main() {
readers := make([]io.Reader, len(items))
for i, item := range items {
readers[i] = item
}
f(readers)
}
英文:
For example,
package main
import (
"bytes"
"io"
)
var items []*bytes.Buffer
func f(items []io.Reader) {}
func main() {
readers := make([]io.Reader, len(items))
for i, item := range items {
readers[i] = item
}
f(readers)
}
答案2
得分: 1
与peterSO的答案类似。
package main
import (
"bytes"
"io"
)
type Foo struct{}
type Foos []Foo
func (f Foos) toReaders() []io.Reader {
readers := make([]io.Reader, len(f))
for i, item := range f {
readers[i] = item
}
return readers
}
func f(items []io.Reader) {}
func main() {
var x Foos
f(x.toReaders())
}
与peterSO的答案类似。
英文:
Similar to peterSO's answer.
package main
import (
"bytes"
"io"
)
type Foo struct{}
type Foos []Foo
func (f Foos) toReaders() []io.Reader {
readers := make([]io.Reader, len(f))
for i, item := range f {
readers[i] = item
}
return readers
}
func f(items []io.Reader) {}
func main() {
var x Foos
f(x.toReaders())
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论