映射 <-> 结构类型转换

目前这是我用来将 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 包


一只甜甜圈
浏览 159回答 1
1回答

慕桂英546537

该encoding/json包使用该reflect包来编组和解组消息。所以你可以reflect直接做同样的事情。如果您不需要对嵌套结构和数组的支持,以下应该可以解决问题:message := Message{}v := reflect.ValueOf(&message).Elem()for key, value := range messageMap {&nbsp; &nbsp; field := v.FieldByName(key)&nbsp; &nbsp; if !field.IsValid() {&nbsp; &nbsp; &nbsp; &nbsp; // or handle as error if you don't expect unknown values&nbsp; &nbsp; &nbsp; &nbsp; continue&nbsp; &nbsp; }&nbsp; &nbsp; if !field.CanSet() {&nbsp; &nbsp; &nbsp; &nbsp; // or return an error on private fields&nbsp; &nbsp; &nbsp; &nbsp; continue&nbsp; &nbsp; }&nbsp; &nbsp; field.Set(reflect.ValueOf(value))}您可以进一步试验验证码在操场上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go