GoDasturchi
Configuration Management: Validation (Part 2)

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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