目前这是我用来将 map[string]interface{} 转换为 Message 结构的方法byteBlob, err := json.Marshal(messageMap)if err != nil { return nil, err}message := &Message{}err = json.Unmarshal(byteBlob, message)if err != nil { return nil, err}我找到了 json 包来解决这个问题,但是进行这种转换的正确方法是什么?显然没有使用 json 包
1 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
该encoding/json包使用该reflect包来编组和解组消息。
所以你可以reflect直接做同样的事情。如果您不需要对嵌套结构和数组的支持,以下应该可以解决问题:
message := Message{}
v := reflect.ValueOf(&message).Elem()
for key, value := range messageMap {
field := v.FieldByName(key)
if !field.IsValid() {
// or handle as error if you don't expect unknown values
continue
}
if !field.CanSet() {
// or return an error on private fields
continue
}
field.Set(reflect.ValueOf(value))
}
您可以进一步试验验证码在操场上。
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消