如何用接口填充切片?

问题描述

我知道我可以用strings := []string{"something","something else"}用字符串填充Go切片,但是除了接口之外,我该怎么做?我尝试了以下方法

data := []interface{}{{ID: "123"},{ID: "456"}}

并出现以下错误

missing type in composite literal

我也曾尝试使用如下结构:

type Users struct {
    ID string
}

[]Users{{ID: "123"},{ID: "456"}}

可以使用,但是mongo的{​​{3}}函数需要一个[]interface{}参数:

cannot use users (type []Users) as type []interface {} in argument to database.InsertMany

如何定义和填充[]interface{}

解决方法

如错误所示,您在复合文字中缺少类型:

data := []interface{}{Users{ID: "123"},Users{ID: "456"}}

应该起作用,因为它不会缺少复合文字中的类型。

,

[]interface{}[]Users在Go语言中是不同的类型。

https://github.com/golang/go/wiki/InterfaceSlice

因此,您可以像Adrian的回答中那样初始化切片,也可以像这样从Users切片创建接口切片

users := []Users{{ID: "123"},{ID: "456"}}
usersInterfaces := make([]interface{},len(users))

for i,u := range users {
    usersInterfaces[i] = u
}