循环实现接口的项目数组

时间:2015-03-31 19:58:48

标签: go

假设我有一个实现接口Reader的项目数组:

var items []Foo

我如何将这些项目传递给需要读者的功能?

func (items []Reader) { ... }

我无法使用[]Reader类型,因为我收到如下错误:

Cannot use type `[]Foo` as type `[]Reader`...

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分: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())
}