GoDasturchi
Configuration Management: Loading Config (Part 1)

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.

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

Hints (0/3)

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)

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

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

Hints (0/3)

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)