【发布时间】:2021-08-26 14:12:44
【问题描述】:
我想做一个函数来解析字符串数组中的切片(一种抽象解析方法,可以是 JSON、msgpack 或 XML)。这个 slice 的类型不确定,可以是 [] A 或者 [] * A。但是现在我有一个问题。你能帮帮我吗
func unmarshalSlice(strings []string, to interface{}) (err error) {
elementType := reflect.TypeOf(to).Elem()
to = reflect.MakeSlice(reflect.SliceOf(elementType), 0, len(strings))
for _, str := range strings {
value := reflect.New(elementType).Interface()
if err = json.Unmarshal([]byte(str), value); nil != err {
return
}
to = reflect.Append(to.(reflect.Value), reflect.ValueOf(value).Elem())
}
return
}
测试代码是
func TestUnmarshalSlice(t *testing.T) {
var members []*Member
_ = unmarshalSlice([]string{
`{
"Value": "store"
}`, `{
"Value": "zhang"
}`,
}, members)
fmt.Println(members)
}
【问题讨论】:
-
“但现在我有一个问题”这是什么?
-
变量为 nil
-
不清楚您要做什么。您是否只是想获取一段 JSON 字符串并将它们解组为一段结构,但使用空接口以“通用”方式?
-
什么是
Member? -
如果输入类型是
[]*whatever,这个value := reflect.New(elementType).Interface()会产生一个**whatever见reflect.Indirect cs.opensource.google/go/go/+/refs/tags/go1.17:src/reflect/…