我从下面的代码中收到以下错误:
typedSlice的无效间接输入(类型接口{})
不能超出typedSlice(类型接口{})的范围
这让我感到困惑,因为reflect.TypeOf(copy)
匹配的类型t
。
func Unmarshal(t reflect.Type) []interface{} {
ret := []interface{}{}
s := `[{"Name":"The quick..."}]`
slice := reflect.Zero(reflect.SliceOf(t))
o := reflect.New(slice.Type())
o.Elem().Set(slice)
typedSlice := o.Interface()
json.Unmarshal([]byte(s), typedSlice)
fmt.Println(typedSlice) // &[{The quick...}]
fmt.Println(reflect.TypeOf(typedSlice)) //same type as t
fmt.Println(*typedSlice) // invalid indirect of copy (type interface {})
for _, l := range typedSlice { //cannot range over copy (type interface {})
ret = append(ret, &l)
}
return ret
}
我创建了一个go go操场,其中包含工作代码以提供帮助。
为什么看起来该切片打印一种类型但编译为另一种类型?
typedSlice的无效间接输入(类型接口{})
您不能取消引用typedSlice
,因为它是一个interface{}
。您将必须使用类型断言来提取指针
realSlice := *typedSlice.(*[]Demo)
不能超出typedSlice(类型接口{})的范围
同样,由于typedSlice
是interface{}
,因此您无法覆盖它。如果要覆盖这些值,则需要使用类型断言,或者通过反射手动进行迭代:
for i := 0; i < o.Elem().Len(); i++ {
ret = append(ret, o.Elem().Index(i).Interface())
}
问题内容: 我有一个要使用函数更改的切片(例如,我想删除第一个元素)。我以为可以使用指针,但仍然无法为其编制索引。我究竟做错了什么? 游乐场链接: 问题答案: 您需要使用。 或通常更像偶像的另一种方法:
因此,我正在研究一个概念,它涉及到自动写入一个类的内容,扩展 例如,我们的想法是声明以下内容 然后,每当第一次调用时,就会初始化它,然后按照指定的顺序将其内容写入本机地址。 但我遇到的唯一问题是收集成员,以便稍后作为参数传递给I-th 因为编译器在这里抱怨: 错误:(328,37)Kotlin:Out投影类型“KProperty1”禁止使用Kotlin中定义的“public abstract fu
我有以下代码来检索http和https的默认,它通过访问静态包作用域方法,在Java8中工作: 这在jigsaw的Java9中仍然是可能的,还是禁止以这种方式修改可见性?
问题内容: 我有以下代码: 但是我想将一个指向字节切片的指针传递给另一个函数,并在那里切片,所以类似: 它给我一个错误,我不能在函数参数中使用type 作为类型,并且不能对type进行切片。怎么了?默认情况下切片不是通过引用传递的吗?我试图在没有指针的情况下执行此操作,但是它不起作用- 正在复制数组。我怎样才能做到这一点? 问题答案: 该错误来自您尚未发布的拼写错误(您尝试传递一个切片而不是指向的
问题内容: 我有一个带有接口参数的函数: 我如何通过它传递一个零值,使其通过检查? 方法1: 方法二: 由于https://golang.org/doc/faq#nil_error,第二种方法不起作用 游乐场:https : //play.golang.org/p/V0bMSPcCKI 问题答案: 使用以下内容创建: 问题中的第一种方法不起作用,因为表达式返回。nil接口值的具体类型为nil。 诀
我有一个类(在我的项目中是一个单例),带有一些变量。我想通过在函数中传递变量的名称来获得其中的一个变量。现在我有: