"Mesclar" coloca duas estruturas do mesmo tipo

Olhando para issostruct:

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

Agora eu tenho umDefaultConfig inicializado com alguns valores e um carregado de um arquivo, digamosFileConfig. Eu quero que ambas as estruturas sejam mescladas para que eu tenha umaConfig com o conteúdo de ambas as estruturas.FileConfig deve substituir qualquer coisa definida emDefaultConfig, enquantoFileConfig pode não ter todos os campos definidos. (Por que isso? Como um usuário em potencial pode não conhecer o valor padrão, remover a entrada seria equivalente a definir o padrão - eu acho)

Eu pensei que precisaria de reflexão para isso:

 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
 }

Aqui não tenho certeza:

Se for necessária reflexãoPode haver maneiras mais fáceis de fazer isso

Outra questão que vejo aqui é que a verificação de valores zero pode ser complicada: e se a estrutura de substituiçãopretende substituir com um valor zero? Felizmente, acho que não se aplica ao meu caso - mas isso se torna uma função, pode se tornar um problema mais tarde

questionAnswers(3)

yourAnswerToTheQuestion