我有一个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 关注
- 74 浏览
添加回答
举报
0/150
提交
取消