Feature flag — переключатель, который позволяет включать и выключать функциональность без деплоя. Хранится в конфиге, БД или специальном сервисе (LaunchDarkly, Unleash).
func handleSearch(w http.ResponseWriter, r *http.Request) {
results := search(r.Context(), query)
if featureFlags.IsEnabled("new_ranking", r.Context()) {
results = newRankingAlgorithm(results)
}
json.NewEncoder(w).Encode(results)
}
Зачем: выкатываешь фичу на 5% пользователей, смотришь метрики, расширяешь на всех. Если что-то пошло не так — выключаешь флаг, а не откатываешь деплой. Это основа trunk-based development: код мёржится в main сразу, но скрыт за флагом. Не забывай удалять старые флаги — со временем они превращаются в мусор и усложняют код.