猿问

分配给 Go 中的接口列表

我有一个Foo带有实现它的结构的接口foo。我有一个接受 s 列表的 API Foo,我需要传入我的foos 列表,但它没有按预期工作:


package main


import "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 很陌生,但为什么它不能编译呢?


汪汪一只猫
浏览 75回答 1
1回答

繁星点点滴滴

界面切片不是界面 - 界面的布局和具体结构的布局是不同的。因此,您不能分配[]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}
随时随地看视频慕课网APP

相关分类

Go
我要回答