Configuration Management: Loading Config (Part 1)
Konfiguratsiyani boshqarish: yuklash (1-qism)
"Environment Variables" darsida bitta-bitta os.Getenv chaqirishni ko'rgan edingiz. Katta ilovada esa o'nlab sozlama bo'lishi mumkin — har birini alohida o'qish o'rniga, ularni BITTA struct'ga yig'ib, bitta joyda "yuklash" ancha toza va boshqarish oson.
package main
import (
"fmt"
"os"
"strconv"
)
type Config struct {
Port int
DBHost string
Debug bool
}
func LoadConfig() (Config, error) {
portStr := os.Getenv("PORT")
if portStr == "" {
portStr = "8080"
}
port, err := strconv.Atoi(portStr)
if err != nil {
return Config{}, fmt.Errorf("noto'g'ri PORT: %w", err)
}
return Config{
Port: port,
DBHost: os.Getenv("DB_HOST"),
Debug: os.Getenv("DEBUG") == "true",
}, nil
}
func main() {
os.Setenv("DB_HOST", "db.internal")
cfg, err := LoadConfig()
if err != nil {
fmt.Println("xato:", err)
return
}
fmt.Println(cfg.Port, cfg.DBHost, cfg.Debug)
}LoadConfig() — barcha sozlamalarni bir joyda, ilova boshlanishida bir marta o'qiydigan funksiya. Bu naqshning foydasi: agar ertaga yangi sozlama qo'shish kerak bo'lsa, uni faqat shu funksiyaga qo'shasiz, va u butun dastur bo'ylab cfg.YangiSozlama orqali erishiladigan bo'lib qoladi — "Constructor Functions" darsida ko'rgan markazlashtirilgan yaratish tamoyilining konfiguratsiyaga qo'llanilgan ko'rinishi.
"true" matnini boolga aylantirish uchun os.Getenv("DEBUG") == "true" kabi sodda solishtirish yetarli — muhit o'zgaruvchilari har doim matn (string) ko'rinishida keladi, shuning uchun ularni kerakli turga (int, bool) aylantirish — konfiguratsiya yuklashning doimiy vazifasi.
>_ Exercise
Config struct'iga MaxConnections maydonini qo'shing.
- •Config struct'iga MaxConnections int maydonini qo'shing
- •LoadConfig ichida MAX_CONNECTIONS ni o'qing (strconv.Atoi bilan), bo'sh bo'lsa 100 standart qiymatini bering
- •MAX_CONNECTIONS="250" bilan LoadConfig() ni chaqirib, MaxConnections'ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Barcha sozlamalarni bitta LoadConfig() funksiyasida, bitta struct'ga yig'ish — ularni butun dastur bo'ylab izchil va markazlashtirilgan holda ishlatish imkonini beradi.
NEXT UP
Configuration Management: Validation (Part 2)
$ go run main.go
Kodingizni ishga tushiring