循环遍历实现接口的项目数组。

huangapple go评论77阅读模式
英文:

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

huangapple
  • 本文由 发表于 2015年4月1日 03:58:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/29377477.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定