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`...
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)
}
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())
}