如何用接口填充切片?

问题描述

我知道我可以用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
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...