您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

类型转换接口片

类型转换接口片

在Go中,有一个通用规则,即语法不应隐藏复杂/昂贵的操作。将a转换string为aninterface{}需要O(1)时间。由于切片仍然是一个[]stringinterface{}因此也需要O(1)时间将a转换为an 。但是,将a转换[]string为an的时间[]interface{}为O(n),因为切片的每个元素都必须转换为an interface{}

此规则的一个例外是转换字符串。当将a string与a[]byte或a进行相互[]rune转换时,即使转换是“语法”,Go仍然可以执行O(n)。

没有标准的库函数可以为您完成此转换。您可以使用反射创建一个,但是它比三行选项要慢。

反射示例:

func InterfaceSlice(slice interface{}) []interface{} {
    s := reflect.ValueOf(slice)
    if s.Kind() != reflect.Slice {
        panic("InterfaceSlice() given a non-slice type")
    }

    ret := make([]interface{}, s.Len())

    for i:=0; i<s.Len(); i++ {
        ret[i] = s.Index(i).Interface()
    }

    return ret
}

最好的选择是使用问题中给出的代码行:

b := make([]interface{}, len(a))
for i := range a {
    b[i] = a[i]
}
其他 2022/1/1 18:14:08 有476人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶