假設我有實現接口Reader
項目的數組:遍歷實現接口的物品陣列
var items []Foo
我將如何通過這些物品放進一個接受讀者的功能?
func (items []Reader) { ... }
,因爲我得到一個錯誤,就像我不能使用類型[]Reader
:
Cannot use type `[]Foo` as type `[]Reader`...
假設我有實現接口Reader
項目的數組:遍歷實現接口的物品陣列
var items []Foo
我將如何通過這些物品放進一個接受讀者的功能?
func (items []Reader) { ... }
,因爲我得到一個錯誤,就像我不能使用類型[]Reader
:
Cannot use type `[]Foo` as type `[]Reader`...
例如,
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)
}
這有效,但它意味着我必須在調用該函數之前遍歷所有項目。我試圖避免循環。 – 2015-03-31 22:55:14
@ VladtheImpala:因爲它們在內存中沒有相同的表示形式,所以需要單獨複製這些元素。 ['我可以將[] T轉換爲[] interface {}?](https://golang.org/doc/faq#convert_slice_of_interface) – peterSO 2015-03-31 23:05:36
到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())
}
請參閱https://golang.org/doc/faq#convert_slice_of_interface(並在讀取時將'io.Reader'替換爲'interface {}')。 – 2015-03-31 20:17:01