На самом деле, мне может понадобиться сделать это .... см. Комментарий в ответе @icza ....

я на этоstruct:

type Config struct {
  path string
  id   string
  key  string
  addr string
  size uint64
}

Теперь у меня естьDefaultConfig инициализирован с некоторыми значениями и одним загруженным из файла, скажемFileConfig, Я хочу, чтобы обе структуры объединились, чтобы яConfig с содержанием обеих структур.FileConfig следует переопределить все, что установлено вDefaultConfig, покаFileConfig может быть не все поля установлены, (Почему это? Потому что потенциальный пользователь может не знать значение по умолчанию, поэтому удаление этой записи будет эквивалентно установке по умолчанию - я думаю)

Я думал, что мне нужно отражение для этого:

 func merge(default *Config, file *Config) (*Config) {
  b := reflect.ValueOf(default).Elem()
  o := reflect.ValueOf(file).Elem()

  for i := 0; i < b.NumField(); i++ {
    defaultField := b.Field(i)
    fileField := o.Field(i)
    if defaultField.Interface() != reflect.Zero(fileField.Type()).Interface() {
     defaultField.Set(reflect.ValueOf(fileField.Interface()))
    }
  }

  return default
 }

Здесь я не уверен:

Если рефлексия нужна вообщеТам могут быть более простые способы сделать это

Другая проблема, которую я вижу здесь, заключается в том, что проверка на нулевые значения может быть сложной: что, если переопределяющая структуранамеревается переопределить с нулевым значением? К счастью, я не думаю, что это применимо к моему делу - но это становится функцией, это может стать проблемой позже

Ответы на вопрос(3)

Ваш ответ на вопрос