为了账号安全,请及时绑定邮箱和手机立即绑定

分配给 Go 中的接口列表

分配给 Go 中的接口列表

Go
汪汪一只猫 2023-08-07 14:52:27
我有一个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

}


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 54 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信