Я хочу преобразовать структуру в карту в Голанге. Было бы неплохо, если бы я мог использовать теги JSON как ключи в созданной карте (в противном случае по умолчанию было бы имя поля).
Редактировать TL; версия DR, 15 июня 2015 г.
Если вы хотите, чтобы быстрое решение для преобразования структуры в карту, см. принятый ответ, увеличьте его и используйте этот пакет.
Счастливое кодирование!:)
Оригинальное сообщение
Пока у меня есть эта функция, я использую пакет отражения, но я не понимаю, как использовать пакет, пожалуйста, не стесняйтесь.
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, потому что он должен содержать мою нужную реализацию (или ее части), но не слишком много понимает.