Tarkibga o'tish

9. Paketlar va standart kutubxona

Modul va paketlarni tashkil qilish hamda standart kutubxonaning eng ko'p ishlatiladigan paketlari: fmt, os, bufio, strings, strconv, time, encoding/json, net/http, flag.

Modul va paketlar

1. go mod init bilan yangi modul yarating. mathx paketida eksport qilinadigan (Sum) va eksport qilinmaydigan (helper) funksiyalar yozing hamda ularni main paketdan chaqiring.
Misol: mathx.Sum(2, 3) → 5; mathx.helper() ni main dan chaqirish — kompilyatsiya xatosi

2. internal/ katalogidagi paketni modul ichidan import qilish mumkinligini, tashqaridan esa mumkin emasligini ko'rsating.
Misol: modul ichidan internal/ paketini import qilish → ishlaydi; tashqi modulda → use of internal package ... not allowed

3. Paketda init() funksiyasi va paket darajasidagi o'zgaruvchilarning ishga tushish tartibini ko'rsating (bir nechta fayl misolida).
Misol: a.go va b.go fayllarida paket o'zgaruvchilari avval, so'ng init() lar fayl nomlari tartibida bajariladi: a: var, b: var, a: init, b: init

4. Tashqi modulni (masalan github.com/google/uuid) qo'shing, go.mod va go.sum fayllaridagi o'zgarishlarni izohlang hamda go mod tidy ni bajaring.
Misol: go get github.com/google/uuid → go.mod ga require qatori, go.sum ga xesh qatorlari qo'shiladi; go mod tidy ishlatilmayotgan bog'liqliklarni olib tashlaydi

5. Paket uchun hujjat izohlarini yozing va go doc bilan ularni ko'ring.
Misol: // Sum a va b ning yig'indisini qaytaradi. izohi → go doc mathx.Sum shu matnni chiqaradi

Kiritish-chiqarish va satrlar

6. bufio.Scanner yordamida standart kirishdan qatorlarni o'qib, har bir qatordagi so'zlar sonini chiqaring. Katta hajmdagi kirish uchun bufio.Reader bilan tezligini solishtiring.
Misol: kirish: bir ikki / uch → 2, 1

7. fmt.Printf ning asosiy formatlash belgilarini (%d, %5.2f, %-10s, %q, %x, %T, %p) bitta jadval ko'rinishidagi natijada namoyish qiling.
Misol: fmt.Printf("%d|%5.2f|%-10s|%q|%x|%T", 42, 3.14159, "salom", "salom", 255, 1.5) → 42| 3.14|salom |"salom"|ff|float64

8. strconv paketi bilan satr va son o'rtasida o'girishlar: ParseInt (turli sanoq sistemalarida), ParseFloat, FormatInt, Quote; har bir xato holatini qayta ishlang.
Misol: ParseInt("ff", 16, 64) → 255; ParseFloat("3.14", 64) → 3.14; FormatInt(255, 2) → 11111111; Atoi("abc") → xato (invalid syntax)

9. strings paketi funksiyalari (Fields, Split, TrimSpace, ReplaceAll, EqualFold, HasPrefix, Builder) yordamida matnni tozalovchi funksiya yozing: ortiqcha bo'shliqlarni olib tashlasin, har bir gapni katta harf bilan boshlasin va taqiqlangan so'zlarni «» bilan almashtirsin.
*Misol:
" salom dunyo. yomon so'z! ", taqiqlangan yomon → Salom dunyo. *** so'z!

10. os.Args va flag paketi yordamida buyruq qatori dasturini yozing: -n 5 -upper fayl.txt kabi bayroqlarni qabul qilib, fayl boshidagi n qatorni chiqarsin.
Misol: go run . -n 2 -upper fayl.txt, fayl: bir / ikki / uch → BIR / IKKI

Vaqt

11. time.Now, Format va Parse bilan ishlang: sanani «02.01.2006 15:04» formatida chiqaring va shu formatdagi satrni time.Time ga aylantiring.
Misol: time.Date(2026, 9, 28, 14, 30, 0, 0, time.UTC).Format("02.01.2006 15:04") → 28.09.2026 14:30; Parse bilan teskarisi

12. Ikki sana orasidagi kunlar sonini, berilgan sanadan 100 kun keyingi sanani va hafta kunini time paketi bilan hisoblang.
Misol: 2024-01-01 va 2024-03-01 → 60 kun; 2024-01-01 dan 100 kun keyin → 2024-04-10, hafta kuni Wednesday

13. time.LoadLocation bilan Toshkent, London va Nyu-York vaqtini bir vaqtda chiqaring.
Misol: bir xil lahza: Toshkent — +05:00, London — +00:00 (qishda) yoki +01:00 (yozda), Nyu-York — -05:00 yoki -04:00

14. time.Duration bilan ishlang: 1h30m kabi satrlarni ParseDuration bilan o'qing va ularni qo'shib, natijani soat va minutlarda chiqaring.
Misol: ParseDuration("1h30m") + ParseDuration("45m") → 2h15m0s, ya'ni 2 soat 15 minut

JSON

15. Student struct'ini JSON'ga (json.Marshal, MarshalIndent) va JSON'dan (json.Unmarshal) o'giring. Teglar yordamida maydon nomlarini o'zgartiring va bo'sh maydonlarni tashlab keting (omitempty).
Misol: Student{Name: "Ali", Grade: 5} → {"name":"Ali","grade":5}; Grade bo'sh va omitempty bo'lsa → {"name":"Ali"}

16. Tuzilishi oldindan noma'lum JSON'ni map[string]any ga o'qing va ichma-ich maydonlarga murojaat qiling.
Misol: {"user": {"name": "Ali", "tags": ["go", "web"]}} → user.name → Ali, user.tags[0] → go

17. json.Decoder yordamida katta JSON massivni butunlay xotiraga yuklamasdan, element-ma-element o'qing.
Misol: [{"id":1},{"id":2},{"id":3}] → 1, 2, 3 ketma-ket o'qiladi, butun massiv xotiraga yuklanmaydi

18. Date turi uchun MarshalJSON va UnmarshalJSON metodlarini yozing: sana JSON'da «2026-09-28» ko'rinishida saqlansin.
Misol: Date{2026, 9, 28} → "2026-09-28"; "2026-09-28" → Date{2026, 9, 28}

19. JSON faylda saqlanadigan vazifalar ro'yxati (todo) dasturini yozing: add, done, list, delete buyruqlari bilan.
Misol: add Non olish → 1; list → 1 [ ] Non olish; done 1; list → 1 [x] Non olish; delete 1; list → bo'sh

HTTP

20. net/http yordamida /hello?name=Ali so'roviga «Salom, Ali!» deb javob beruvchi server yozing.
Misol: GET /hello?name=Ali → Salom, Ali!; GET /hello → Salom, mehmon!

21. Go 1.22 marshrutlash naqshlaridan (GET /users/{id}) foydalanib, r.PathValue("id") bilan parametrni oluvchi handler yozing.
Misol: GET /users/42 → id = 42

22. Xotirada saqlanadigan talabalar ro'yxati uchun JSON REST API yozing: GET /students, POST /students, GET /students/{id}, DELETE /students/{id}; to'g'ri holat kodlarini qaytaring.
Misol: POST /students {"name":"Ali"} → 201 {"id":1,"name":"Ali"}; GET /students/1 → 200; GET /students/99 → 404; DELETE /students/1 → 204

23. So'rovlarni jurnalga yozuvchi (logging) va panikani ushlab 500 qaytaruvchi (recover) middleware'lar yozing va ularni handler'larga ulang.
Misol: so'rov GET /hello → log: GET /hello 200 120µs; handler panic bersa → javob 500, server ishlashda davom etadi

24. http.Client bilan tashqi API'ga so'rov yuboring: vaqt chegarasi (Timeout) qo'ying, javob holat kodini tekshiring va JSON javobni struct'ga o'qing.
Misol: Timeout = 2s: javob 200 bo'lsa JSON struct'ga o'qiladi; 404 bo'lsa xato; server 5 s kutsa → context deadline exceeded (Client.Timeout exceeded)

25. Serverni Ctrl+C bosilganda (os/signal) joriy so'rovlarni yakunlab, to'g'ri to'xtatadigan (graceful shutdown) qilib yozing.
Misol: Ctrl+C bosilganda: «to'xtatilmoqda…», joriy so'rovlar tugagach (Shutdown) → «server to'xtadi»

26. html/template yordamida talabalar ro'yxatini HTML jadval ko'rinishida qaytaruvchi sahifa yozing.
Misol: [{Ali 5} {Vali 4}] → HTML <table> da 2 ta qator: Ali 5, Vali 4

Qo'shimcha paketlar

27. log/slog bilan strukturalangan loglar yozing: matn va JSON formatlarida, turli darajalar (Debug, Info, Warn, Error) bilan.
Misol: slog.Info("salom", "user", "ali") → matn: level=INFO msg=salom user=ali; JSON: {"level":"INFO","msg":"salom","user":"ali"}

28. os va path/filepath yordamida katalogni rekursiv aylanib chiqing (filepath.WalkDir) va eng katta 10 ta faylni hajmi bilan chiqaring.
Misol: katalogda a.bin (3 MB), b.txt (1 KB), c.log (500 KB) → a.bin 3 MB, c.log 500 KB, b.txt 1 KB

29. crypto/sha256 bilan faylning xesh qiymatini hisoblang va ikki katalogdagi bir xil fayllarni (dublikatlarni) toping.
Misol: ikkita bir xil mazmunli fayl → bir xil sha256 xeshi → «dublikat: a.txt va copy/a.txt»

30. embed paketi yordamida statik fayllarni (HTML, CSS) dasturning bajariladigan fayliga joylashtiring va ularni HTTP server orqali tarqating.
Misol: //go:embed static/* → go build dan keyin static/index.html bajariladigan fayl ichida; GET / → HTML sahifa