gpt4 book ai didi

go - 分配给 Go 中的接口(interface)列表

转载 作者:行者123 更新时间:2023-12-01 20:24:18 24 4
gpt4 key购买 nike

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

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

最佳答案

接口(interface) slice 不是接口(interface)——接口(interface)的布局和具体结构的布局是不同的。因此,您不能分配 []foo[]Foo .

这是一个足够常见的错误,甚至在 golang wiki 上都有记录:https://github.com/golang/go/wiki/InterfaceSlice

如果您需要 Foo 的 slice 接口(interface),那么您只需制作一个并在循环中分配它们。取自 wiki 的示例:

var dataSlice []int = foo()
var interfaceSlice []interface{} = make([]interface{}, len(dataSlice))
for i, d := range dataSlice {
interfaceSlice[i] = d
}

关于go - 分配给 Go 中的接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com