Включение различий между различными средами выполнения непосредственно в двоичный файл приводит к ненужной сложности и неправильному распределению ответственности.
Рассмотрим следующий код, который ссылается на переменную среды, представляющую среду, и возвращает ключ API на ее основе:
package main import ( "os" ) func main() { functionUsesAPIKey(getAPIKey()) } func getAPIKey() string { switch os.Getenv("ENV") { case "PROD": return "XXXXX" case "DEV": return "XXXXX" default: panic("missing ENV") } }
Этот подход имеет проблемы с переносимостью и ремонтопригодностью:
- Если вы хотите запустить приложение в другой среде, вам нужно добавить еще один оператор case и перестроить его.
- По мере добавления дополнительных сред сложность приложения возрастает.
Обязанности должны быть четко определены и разделены. Это делает код проще, легче для чтения и обслуживания.
Код должен быть рефакторинг следующим образом:
package main import ( "os" ) func main() { functionUsesAPIKey(os.Getenv("API_KEY")) }
Эта версия упрощает код. В то же время он делегирует ответственность за обработку различий в окружающей среде внешним инструментам или процессам.
Сохранение простоты кода и обеспечение четкого разграничения ответственности всегда является хорошей практикой.
P.S. Я знаю; Я оставил в стороне вопрос безопасности и сосредоточился на других.