26 / 68

Packages

Paketlar

Go dasturlash tilida paket (package) — bu ma'lum bir vazifani bajarishga mo'ljallangan funksiyalar, turlar va o'zgaruvchilar to'plamidir.

Katta loyihalarda barcha kodlarni bitta faylga yozish tartibsizlikka olib keladi. Paketlar yordamida tegishli kodlarni alohida papka va fayllarga ajratish, kodni modulli qilish va boshqa loyihalarda ham qayta ishlatish mumkin.


1. main paketi va dastur ijrosi

Goda har bir mustaqil ishga tushuvchi dastur package main bilan boshlanadi:

example.go
package main

import "fmt"

func main() {
    fmt.Println("Salom Dunyo!")
}

Qachonki Go kompilyatori package main va main() funksiyasini ko'rsa, uni mustaqil ishga tushuvchi (executable) dastur sifatida qabul qiladi.


2. Paketlarni import qilish (import)

Paketdagi funksiyalardan foydalanish uchun uni dasturga import qilish lozim:

example.go
// Bittalab import qilish
import "fmt"
import "math"

// Guruhlab import qilish (tavsiya etiladi)
import (
    "fmt"
    "math"
    "strings"
)

3. Goning asosiy standart paketlari

1. fmt paketi

Ma'lumotlarni kiritish va chiqarish (I/O formatting) uchun xizmat qiladi:

example.go
package main

import "fmt"

func main() {
    var number int

    fmt.Print("Son kiriting: ")
    fmt.Scan(&number)

    fmt.Println("Kiritilgan son:", number)
    fmt.Printf("O'nlik formatda: %d\n", number)
}

2. math paketi

Murakkab matematik hisob-kitoblar uchun qo'llaniladi:

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    // Kvadrat ildiz
    fmt.Println(math.Sqrt(25)) // 5

    // Kub ildiz
    fmt.Println(math.Cbrt(27)) // 3

    // Eng katta son
    fmt.Println(math.Max(21, 18)) // 21

    // Eng kichik son
    fmt.Println(math.Min(21, 18)) // 18

    // Qoldiqli bo'lish
    fmt.Println(math.Mod(5, 2)) // 1
}

3. strings paketi

Satrlar ustida amallar bajarish:

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.ToLower("GOLANG")) // golang
    fmt.Println(strings.ToUpper("golang")) // GOLANG

    words := []string{"Go", "dasturlash", "tili"}
    fmt.Println(strings.Join(words, " "))  // Go dasturlash tili
}

4. Shaxsiy paket yaratish (Custom Package)

Goda o'zingizning maxsus paketingizni yaratish juda oson.

1. Paket faylini yaratish (calculator/calculator.go):

example.go
package calculator

// Boshqa fayllarda ishlatilishi uchun nom katta harf bilan boshlanishi shart!
func Add(n1, n2 int) int {
    return n1 + n2
}

func Subtract(n1, n2 int) int {
    return n1 - n2
}

[!IMPORTANT] Go tilida paket tashqarisidan chaqirilishi kerak bo'lgan funksiya, o'zgaruvchi yoki tuzilma nomlari bosh harf bilan (Capitalized) yozilishi shart (masalan, Add, Subtract). Kichik harf bilan yozilgan nomlar faqat o'sha paket ichida ko'rinadi (private).

2. Shaxsiy paketni main.go da ishlatish:

example.go
package main

import (
    "fmt"
    "myproject/calculator" // Paket yo'li
)

func main() {
    n1 := 9
    n2 := 5

    fmt.Println("Yig'indi:", calculator.Add(n1, n2))       // 14
    fmt.Println("Ayirma:", calculator.Subtract(n1, n2)) // 4
}

5. Paket nomiga taxallus berish (Package Aliasing)

Agar paket nomi juda uzun bo'lsa yoki nomlar to'qnashuvi yuz bersa, unga yangi qisqa nom (alias) berish mumkin:

example.go
package main

import (
    "fmt"
    str "strings" // strings o'rniga str taxallusidan foydalanamiz
)

func main() {
    fmt.Println(str.ToUpper("godasturchi")) // GODASTURCHI
}

6. Bo'sh identifikator bilan import qilish (_)

Go tili ishlatilmagan paketlarni import qilishga ruxsat bermaydi va xatolik beradi (imported and not used).

Agar paketdagi funksiyalar to'g'ridan-to'g'ri chaqirilmasa-da, faqat uning init() funksiyasi ishga tushishi talab qilinsa (masalan, ma'lumotlar bazasi drayverlari uchun), paket nomi oldiga bo'sh identifikator _ qo'yiladi:

example.go
package main

import (
    "fmt"
    _ "math" // math ishlatilmasa ham xatolik bermaydi
)

func main() {
    fmt.Println("Go paketlari bilan ishlash")
}