«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно объединить тот же тип структуры GO? Метод кодирования JSON

Как эффективно объединить тот же тип структуры GO? Метод кодирования JSON

Опубликовано в 2025-04-16
Просматривать:822

How Can I Efficiently Merge Go Structs of the Same Type Using JSON Encoding?

слияние полей идентичных структур с кодированием json

в сфере программирования GO, задача слияния полей из двух структур одного типа часто возникает. Рассмотрим сценарий, в котором у вас есть конфигурация по умолчанию, например:

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

var DefaultConfig = Config{"", "", "", "", 0}

и конфигурация, загруженная из файла, например:

var FileConfig = Config{"", "file_id", "", "file_addr", 0}

, однако, в этом случае отражение не является оптимальным решением. Более элегантным подходом является использование мощности пакета кодирования/JSON.

пакет кодирования/JSON обеспечивает простой механизм для данных Unmarshal JSON в предварительно определенную структуру GO. Используя эту технику, вы можете элегантно объединить свои конфигурации:

]
 импорт (
  "Кодирование/json"
  "Строки"
)

const filecontent = `{" id ":" file_id "," addr ":" file_addr "," size ": 100}`

func unmarshalconfig (conf *config, string content) ошибка {
  return json.newdecoder (strings.newreader (content)). Decode (conf)
}

func mergeconfigs (defconfig *config, fileconfig *config) ошибка {
  if err: = unmarshalconfig (defconfig, filecontent); err! = nil {
    вернуть ошибку
  }
  
  для _, v: = range fileconfig {
    defconfig [v.key] = v.value
  }
  
  вернуть ноль
}. Пакет кодирования/JSON обрабатывает все сложности значений поля настройки, включая отсутствующие значения (которые по умолчанию будут по их нулевому значению) и определенными файлами значениями, которые переопределяют значения по умолчанию.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3