在Golang中初始化接口数组

Kir*_*Kir 27 go

这是一个变量的例子:

names := []interface{}{"first", "second"}

如何从字符串数组中动态初始化?

val*_*val 33

strs := []string{"first", "second"}
names := make([]interface{}, len(strs))
for i, s := range strs {
    names[i] = s
}
Run Code Online (Sandbox Code Playgroud)

会是最简单的

  • 绝对.但请注意,`[] interface {} {}`初始化数组的长度为零,并且在调用`append`时长度增加(可能涉及副本).如果您的阵列不是非常大,这通常不是问题.如果是,`make`用全长初始化它并且永远不复制它(因为从开始就知道大小). (4认同)

Ale*_*der 16

如果只有两个动态添加的字符串,这也适用:

var names []interface{}
names = append(names, "first")
names = append(names, "second")
Run Code Online (Sandbox Code Playgroud)

或这个:

var names []interface{}
names = append(names, "first", "second")
Run Code Online (Sandbox Code Playgroud)


Vin*_*Xie 6

您可以使用 interface{} 数组来构建它。

values := make([]interface{}, 0)
values = append(values, 1, 2, 3, nil, 4, "ok")
Run Code Online (Sandbox Code Playgroud)

然后在使用该值时检查类型。

for _, v := range values {
    if v == nil {
        fmt.Println("it is a nil")
    } else {
        switch v.(type) {
        case int:
            fmt.Println("it is a int")
        case string:
            fmt.Println("it is a string")
        default:
            fmt.Println("i don't know it")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)