如何在Go中将[]interface{}转换为[]string?

3

我目前正在处理一个代码片段,其中包含类型为[]interface{}的变量。

该变量中包含的值,我可以很容易地像这样访问:

//given that args is of type []interface{}
name := args[0]
age  := args[1] //ect...

这很好,但我希望能够使用 stringsJoin 函数,通常会出错,因为它需要类型为 []string 而不是类型为 []interface{}
那么最适合的解决方案是什么呢?我猜可能需要进行某种转换?

3
让这份文档成为你的好朋友吧 :) http://golang.org/doc/effective_go.html#interface_conversions - elithrar
1个回答

4

为了使用 strings.Join,您需要构建一个类型为[]string的新数组:

import "fmt"
import "strings"

func main() {
    s1 := []interface{}{"a", "b", "c"}
    s2 := make([]string, len(s1))
    for i, s := range s1 {
        s2[i] = s.(string)
    }
    fmt.Println(strings.Join(s2, ", "))
}

请参见相关的 Golang 常见问题解答:我可以将 []T 转换为 []interface{} 吗?


1
我想补充一下,使用interface{}而不是特定类型会有一些小的速度劣势,如果您没有使用任何goroutine,则劣势几乎会慢7倍。这里是我运行的一些测试的链接:http://www.limitlessfx.com/golang-using-interface-vs-specific-type.html - OneOfOne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接