我有一個Foo帶有實現它的結構的接口foo。我有一個接受 s 列表的 API Foo,我需要傳入我的foos 列表,但它沒有按預期工作:package mainimport "fmt"type foo struct {}func (f foo) Do() { fmt.Println("hi")}type Foo interface { Do()}func main() { var f foo var F Foo F = f // compiles just fine var fs []foo var Fs []Foo Fs = fs // doesn't compile for some reason}我確信我錯過了一些明顯的東西,因為我對 Go 很陌生,但為什么它不能編譯呢?
1 回答

繁星點點滴滴
TA貢獻1803條經驗 獲得超3個贊
界面切片不是界面 - 界面的布局和具體結構的布局是不同的。因此,您不能分配[]foo給[]Foo.
這是一個很常見的錯誤,甚至在 golang wiki 上都有記錄: https: //github.com/golang/go/wiki/InterfaceSlice
如果您需要一部分Foo接口,那么您只需創建一個接口并在循環中分配它們。例子取自維基:
var dataSlice []int = foo()
var interfaceSlice []interface{} = make([]interface{}, len(dataSlice))
for i, d := range dataSlice {
interfaceSlice[i] = d
}
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
0/150
提交
取消