我从下面的代码中收到以下错误:typedSlice 的无效间接(type interface {})不能覆盖 typedSlice(类型 interface {})这让我感到困惑,因为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 游乐场来提供帮助。为什么看起来这个切片打印一种类型但编译为另一种类型?
1 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
typedSlice 的无效间接(type interface {})
你不能取消引用typedSlice,因为它是一个interface{}. 您必须使用类型断言提取指针
realSlice := *typedSlice.(*[]Demo)
不能覆盖 typedSlice(类型 interface {})
同样,由于typedSlice是interface{},您不能对其进行范围调整。如果你想跨越你需要使用类型断言的值,或者通过反射手动迭代:
for i := 0; i < o.Elem().Len(); i++ {
ret = append(ret, o.Elem().Index(i).Interface())
}
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消