Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 将接口{}转换为[]接口{}_Go - Fatal编程技术网

Go 将接口{}转换为[]接口{}

Go 将接口{}转换为[]接口{},go,Go,如何将接口{}强制转换为[]接口{} rt := reflect.ValueOf(raw) switch rt.Kind() { case reflect.Slice: src := raw.([]interface{}) //this operation errors out for _,_ := range src { //some operation } } 我得到一个错误:接口转换:接口{}是[]字符串,而不是[]接口{} 我想让这个方法足

如何将接口{}强制转换为[]接口{}

rt := reflect.ValueOf(raw)
switch rt.Kind() {
case reflect.Slice:
    src := raw.([]interface{}) //this operation errors out
    for _,_ :=  range src {
        //some operation
    }  
}
我得到一个错误:接口转换:接口{}是[]字符串,而不是[]接口{} 我想让这个方法足够通用,可以处理任何类型,而不是固定类型

我是个新手,我被这个问题困住了,很可能我做错了。有什么建议吗?我该怎么做

编辑: 一些操作是返回字节数组的json.Marshal

我真正想做的是:
我有一个接收接口类型的函数,如果它是一个数组/片,那么我希望对每个项运行json.Marshal,而不是将其作为一个整体应用。基本上,如果第一级对象是数组,我会尝试分解JSON blob,是的,它需要是泛型的。

正如错误消息所述,[]字符串不是[]接口{}。有关说明,请参阅

使用reflect API来完成以下操作:

v := reflect.ValueOf(raw)
switch v.Kind() {
case reflect.Slice:
    for i := 0; i < v.Len(); i++ {
        elem := v.Index(i).Interface()
        // elem is an element of the slice
    }
}

.

我想让这种方法通用化,我是新手,几乎总是意味着你走错了路。不要在反射的基础上创建复杂的东西,保存三行简单的代码;只需编写三行简单的代码,然后继续。你认为哪些操作可以适用于每种可能的类型?或者你实际上在处理的类型真的很少吗?听起来你想要的是界面,而不是反射。如果您试图编写通用映射或过滤函数,请停止。如果有一个好的方法可以做到这一点,那就是在stdlib中。@RobNapier我在原始帖子中添加了更多的信息,如果这有助于澄清的话。谢谢你读过吗?