登录
首页 >  Golang >  Go问答

Go 中的接口分配

来源:stackoverflow

时间:2024-03-04 20:12:32 397浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Go 中的接口分配》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我有一个接口 foo 和一个实现它的结构 foo 。我有一个接受 foos 列表的 api,我需要传入我的 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 很陌生,但为什么它不能编译?


解决方案


界面切片不是界面 - 界面的布局和具体结构的布局是不同的。因此,您不能将 []foo 分配给 []foo

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

如果您需要一片 foo 接口,那么您只需制作一个并在循环中分配它们。示例取自 wiki:

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

以上就是《Go 中的接口分配》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>