У меня есть структура, содержащая много полей. Я выяснил, как извлекать информацию о имени поля, значении и теге, используя отражение. Я также хочу, чтобы определить, отличается ли значение поля от значения по умолчанию поля.
В настоящее время у меня есть (работает, но немного вонючий):
...
qsMap := make(map[string]interface{})
var defaultTime time.Time
var defaultString string
...
// get the field name and value
fieldName := s.Type().Field(i).Tag.Get("bson")
fieldValue := valueField.Interface()
// use reflection to determine the TYPE of the field and apply the proper formatting
switch fieldValue.(type) {
case time.Time:
if fieldValue != defaultTime {
qsMap[fieldName] = fieldValue
}
case string:
if fieldValue != defaultString {
qsMap[fieldName] = fieldValue
}
...
}
Мне кажется, что в этом случае должен быть способ избежать переключения типа - то, что я пытаюсь сделать, это создать карту поля/значений, значение которой отличается от нулевого значения по умолчанию, что-то вроде
// doesn't work -- i.e., if fieldValue of type string would be compared against "", etc.
if fieldValue != reflect.Zero(reflect.Type(fieldValue)) {
qsMap[fieldName] = fieldValue
}
Есть ли элегантный способ сделать это?
Спасибо!