GoDasturchi
Creating Packages: Visibility and Organization

Creating Packages: Visibility and Organization

Paketlar yaratish: ko'rinuvchanlik va tashkillashtirish

Shu paytgacha yozgan barcha kodingiz bitta faylda, bitta package main ichida yashadi. Haqiqiy loyihalar esa kodni paketlarga bo'ladi — har biri o'z papkasida, o'z mas'uliyati bilan. Bu darsdan boshlab kod muharriri bir nechta faylni ko'rsatishi uchun maxsus belgidan foydalanadi: -- fayl_nomi -- qatori yangi fayl boshlanishini bildiradi.

example.go
-- go.mod --
module example.com/app

go 1.21
-- greet/greet.go --
package greet

func Hello(name string) string {
    return "Salom, " + name + "!"
}
-- main.go --
package main

import (
    "fmt"

    "example.com/app/greet"
)

func main() {
    fmt.Println(greet.Hello("Dunyo"))
}

Bu — uchta alohida fayl: go.mod (modul ta'rifi — keyingi darslarda batafsil ko'rasiz), greet/greet.go (yangi greet paketi) va main.go. greet paketidan foydalanish uchun main.go uni modul yo'li orqali import qiladi: example.com/app/greet — bu go.moddagi modul nomi (example.com/app) va paket papkasi nomining (greet) birlashmasi.

Endi eng muhim qoida — ko'rinuvchanlik (visibility): Go'da bu juda oddiy. Agar identifikator (funksiya, tur, o'zgaruvchi) katta harf bilan boshlansa, u eksport qilingan (exported) — boshqa paketlardan foydalanish mumkin. Kichik harf bilan boshlansa, u eksport qilinmagan (unexported) — faqat o'z paketi ichida ko'rinadi.

example.go
package shapes

// validate — eksport qilinmagan, faqat shapes paketi ichida ko'rinadi
func validate(width, height float64) bool {
    return width > 0 && height > 0
}

// Area — eksport qilingan, boshqa paketlar ham chaqira oladi
func Area(width, height float64) float64 {
    if !validate(width, height) {
        return 0
    }
    return width * height
}

Bu — Composite Types kursidagi struct maydonlari eksporti bilan bir xil qoida (Name — eksport, name — yo'q), faqat endi butun paket darajasida qo'llaniladi. validateshapes paketining ichki, yashirin tafsiloti; Area — uning tashqi, chaqiriladigan interfeysi.

>_ Exercise

shapes papkasida shapes.go faylini yarating: unda eksport qilinmagan validate(width, height float64) bool funksiyasi (ikkalasi ham musbat bo'lsa true qaytaradi) va eksport qilingan Area(width, height float64) float64 funksiyasi bo'lsin — u avval validate bilan tekshiradi, noto'g'ri bo'lsa 0 qaytaradi, aks holda yuzani hisoblaydi. main.goda bu paketni import qilib, ikkita holatni sinab ko'ring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Go'da ko'rinuvchanlik identifikator nomining birinchi harfi bilan belgilanadi: katta harf — eksport qilingan (boshqa paketlar ko'radi), kichik harf — eksport qilinmagan (faqat o'z paketi ichida). Paketlar shu tariqa o'zining ichki tafsilotlarini yashirib, faqat kerakli tashqi interfeysni ko'rsatadi.

NEXT UP

Package Variables and init(): Managing State

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Creating Packages: Visibility and Organization

Paketlar yaratish: ko'rinuvchanlik va tashkillashtirish

Shu paytgacha yozgan barcha kodingiz bitta faylda, bitta package main ichida yashadi. Haqiqiy loyihalar esa kodni paketlarga bo'ladi — har biri o'z papkasida, o'z mas'uliyati bilan. Bu darsdan boshlab kod muharriri bir nechta faylni ko'rsatishi uchun maxsus belgidan foydalanadi: -- fayl_nomi -- qatori yangi fayl boshlanishini bildiradi.

example.go
-- go.mod --
module example.com/app

go 1.21
-- greet/greet.go --
package greet

func Hello(name string) string {
    return "Salom, " + name + "!"
}
-- main.go --
package main

import (
    "fmt"

    "example.com/app/greet"
)

func main() {
    fmt.Println(greet.Hello("Dunyo"))
}

Bu — uchta alohida fayl: go.mod (modul ta'rifi — keyingi darslarda batafsil ko'rasiz), greet/greet.go (yangi greet paketi) va main.go. greet paketidan foydalanish uchun main.go uni modul yo'li orqali import qiladi: example.com/app/greet — bu go.moddagi modul nomi (example.com/app) va paket papkasi nomining (greet) birlashmasi.

Endi eng muhim qoida — ko'rinuvchanlik (visibility): Go'da bu juda oddiy. Agar identifikator (funksiya, tur, o'zgaruvchi) katta harf bilan boshlansa, u eksport qilingan (exported) — boshqa paketlardan foydalanish mumkin. Kichik harf bilan boshlansa, u eksport qilinmagan (unexported) — faqat o'z paketi ichida ko'rinadi.

example.go
package shapes

// validate — eksport qilinmagan, faqat shapes paketi ichida ko'rinadi
func validate(width, height float64) bool {
    return width > 0 && height > 0
}

// Area — eksport qilingan, boshqa paketlar ham chaqira oladi
func Area(width, height float64) float64 {
    if !validate(width, height) {
        return 0
    }
    return width * height
}

Bu — Composite Types kursidagi struct maydonlari eksporti bilan bir xil qoida (Name — eksport, name — yo'q), faqat endi butun paket darajasida qo'llaniladi. validateshapes paketining ichki, yashirin tafsiloti; Area — uning tashqi, chaqiriladigan interfeysi.

>_ Exercise

shapes papkasida shapes.go faylini yarating: unda eksport qilinmagan validate(width, height float64) bool funksiyasi (ikkalasi ham musbat bo'lsa true qaytaradi) va eksport qilingan Area(width, height float64) float64 funksiyasi bo'lsin — u avval validate bilan tekshiradi, noto'g'ri bo'lsa 0 qaytaradi, aks holda yuzani hisoblaydi. main.goda bu paketni import qilib, ikkita holatni sinab ko'ring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Go'da ko'rinuvchanlik identifikator nomining birinchi harfi bilan belgilanadi: katta harf — eksport qilingan (boshqa paketlar ko'radi), kichik harf — eksport qilinmagan (faqat o'z paketi ichida). Paketlar shu tariqa o'zining ichki tafsilotlarini yashirib, faqat kerakli tashqi interfeysni ko'rsatadi.

NEXT UP

Package Variables and init(): Managing State