我想把 struct 转换成 Golang 的 map。如果我可以使用 JSON 标记作为创建的映射中的键(否则默认为字段名) ,那也是很好的。
如果您想要将结构转换为映射的快速解决方案,请参见 接受的答案,对它进行升级并使用该包。
编程愉快! :)
到目前为止我有这个功能,我正在使用反射包,但我不明白如何使用包,请容忍我。
func ConvertToMap(model interface{}) bson.M {
ret := bson.M{}
modelReflect := reflect.ValueOf(model)
if modelReflect.Kind() == reflect.Ptr {
modelReflect = modelReflect.Elem()
}
modelRefType := modelReflect.Type()
fieldsCount := modelReflect.NumField()
var fieldData interface{}
for i := 0; i < fieldsCount; i++ {
field := modelReflect.Field(i)
switch field.Kind() {
case reflect.Struct:
fallthrough
case reflect.Ptr:
fieldData = ConvertToMap(field.Interface())
default:
fieldData = field.Interface()
}
ret[modelRefType.Field(i).Name] = fieldData
}
return ret
}
我还查看了 JSON 包的源代码,因为它应该包含我所需要的实现(或者部分实现) ,但是不太理解。