Configuration Management: Validation (Part 2)
Konfiguratsiyani boshqarish: tekshirish (2-qism)
Samolyot parvozdan oldin "tekshiruv ro'yxati" (checklist)dan o'tadi: yoqilg'i yetarlimi, barcha asboblar ishlayaptimi. Agar biror narsa yo'q bo'lsa, samolyot yerda qoladi — havoda emas. Xuddi shunday, ilova ishga tushishidan oldin barcha zarur sozlamalar mavjudligini tekshirishi kerak — yo'qsa, yarim sozlangan holda ishga tushib, keyinroq kutilmagan joyda qulashi mumkin.
package main
import (
"errors"
"fmt"
"os"
)
type Config struct {
DBHost string
APIKey string
}
func LoadConfig() (Config, error) {
cfg := Config{
DBHost: os.Getenv("DB_HOST"),
APIKey: os.Getenv("API_KEY"),
}
if err := cfg.Validate(); err != nil {
return Config{}, err
}
return cfg, nil
}
func (c Config) Validate() error {
if c.DBHost == "" {
return errors.New("DB_HOST berilishi shart")
}
if c.APIKey == "" {
return errors.New("API_KEY berilishi shart")
}
return nil
}
func main() {
os.Setenv("DB_HOST", "db.internal")
// API_KEY ATAYLAB o'rnatilmagan
_, err := LoadConfig()
fmt.Println(err)
}Validate() metodi — ilova ISHGA TUSHISHDAN OLDIN barcha zarur sozlama mavjudligini tekshiradi. Bu "Constructor Functions" darsida ko'rgan "konstruktor ichida tekshirish" naqshining konfiguratsiyaga qo'llanilishi: agar API_KEY yo'q bo'lsa, dastur darhol, aniq xato bilan to'xtaydi — buni ishga tushirilgandan bir soat o'tib, birinchi API so'rovi muvaffaqiyatsiz bo'lganda bilib qolishdan ancha yaxshi.
Bu — "fail fast" ("tezroq muvaffaqiyatsiz bo'l") tamoyili deb ataladi: muammoni imkon qadar ERTA, aniq xato xabari bilan topish, uni keyinga qoldirib, keyin qiyin tushunadigan joyda paydo bo'lishiga yo'l qo'ymaslik.
>_ Exercise
Config'ga PORT tekshiruvini qo'shing.
- •Config struct'iga Port int maydonini qo'shing
- •Validate() metodiga: Port <= 0 yoki Port > 65535 bo'lsa xato qaytaring
- •Port: 0 bilan Validate() ni chaqirib, xatoni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Konfiguratsiyani ishga tushirishdan oldin tekshirish ("fail fast") — muammoni ishga tushishning eng boshida, aniq xabar bilan topish, uni keyinga qoldirib qiyinlashtirmaslik imkonini beradi.
NEXT UP
Graceful Shutdown
$ go run main.go
Kodingizni ishga tushiring