循环实现接口的项目数组

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