为了账号安全,请及时绑定邮箱和手机立即绑定

映射 <-> 结构类型转换

映射 <-> 结构类型转换

Go
一只甜甜圈 2021-06-15 01:21:59
目前这是我用来将 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))

}

您可以进一步试验验证码在操场上。


查看完整回答
反对 回复 2021-06-28
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信