os va flag
os — operatsion tizim bilan gaplashadigan paket: argumentlar, muhit o’zgaruvchilari (environment variables), fayllar. flag esa CLI dasturlarga berilgan bayroqlarni (flag) tartib bilan o’qib beradi.
os.Args
os.Args — dasturga berilgan argumentlarning slice’i. Birinchi element (os.Args[0]) — dasturning o’zining nomi, qolganlari esa haqiqiy argumentlar.
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Dastur:", os.Args[0])
fmt.Println("Argumentlar:", os.Args[1:])
}$ go run args.go salom dunyo
Dastur: /tmp/go-build.../args
Argumentlar: [salom dunyo]Qisqasi: os.Args[0] — dasturning yo’li; haqiqiy argumentlar os.Args[1:] ichida.
Manba / batafsil: pkg.go.dev/os#pkg-variables
os.Getenv
Muhit o’zgaruvchilari — config uzatishning eng oddiy yo’li. Getenv topilmagan o’zgaruvchiga bo’sh string qaytaradi; LookupEnv esa o’zgaruvchi bor-yo’qligini ham aytib beradi.
package main
import (
"fmt"
"os"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
fmt.Println("Port:", port)
}$ PORT=3000 go run env.go
Port: 3000
$ go run env.go
Port: 8080Qisqasi: topilmagan o’zgaruvchiga standart qiymat bermoqchi bo’lsangiz, bo’sh stringni tekshiring.
Manba / batafsil: pkg.go.dev/os#Getenv
Fayl o’qish va yozish
Kichik fayllar uchun os.WriteFile va os.ReadFile juda qulay — bitta qatorda butun faylni yozib yoki o’qib beradi. Ular bayt ([]byte) bilan ishlaydi.
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("salom.txt", []byte("salom fayl\n"), 0644)
data, err := os.ReadFile("salom.txt")
if err != nil {
fmt.Println("Xato:", err)
return
}
fmt.Print(string(data))
}$ go run file.go
salom faylTakeaway: kichik fayllarga ReadFile/WriteFile; katta fayllarni bufio bilan oqim qilib o’qing.
Manba / batafsil: pkg.go.dev/os#ReadFile
flag paketi
flag bilan CLI bayroqlarini e’lon qilamiz: nom, standart qiymat, izoh. flag.Parse() ularni os.Args dan o’qiydi. Bayroqlar pointer qaytaradi.
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "dunyo", "kimga salom")
count := flag.Int("count", 1, "necha marta")
flag.Parse()
for range *count {
fmt.Printf("Salom, %s!\n", *name)
}
}$ go run flags.go -name Ali -count 2
Salom, Ali!
Salom, Ali!Takeaway: flag avtomatik -h/--help va tur tekshiruvini beradi — qo’lda os.Args tahlil qilishdan afzal.
Manba / batafsil: pkg.go.dev/flag
Keyingi qismda log/slog — strukturaviy loglashni ko’ramiz.