Go package
Go dasturlash tilida package (paket) bu kodni modullashtirish va qayta foydalanish uchun qulay ko'rinishda yozish hisoblandi. Paketlar kodni tartibga solishga, takrorlanishdan qochishga va loyihani yaxshi tuzishga yordam beradi.
Paket (package) nima?
Paket bu Go fayllar to'plami bo'lib, ular bitta katalogda joylashgan va bitta package nomiga ega bo'ladi.
Paket yaratish qoidalari
- Har bir .go fayl package
qatori bilan boshlanishi kerak. - Bitta katalog ichidagi barcha .go fayllar bitta package ga tegishli bo'lishi kerak.
- main paketi Go dasturini ishga tushirish uchun majburiy hisoblanadi.
Go paketlarining turlari
Go paketlari ikkita asosiy turga bo'linadi:
- Asosiy paketlar (main package) – dastur ishga tushiriladigan paket.
- Kutubxona paketlar (library packages) – boshqa paketlar tomonidan import qilinadigan kodlar.
main paketi va bajariluvchi kod (executable package)
Agar Go dasturi main package ni o'z ichiga olmasa, bajariluvchi (executable) fayl hosil bo'lmaydi.
Kodni go run main.go
bilan ishga tushiring.
Natija:
Agar biz shu yerda package main
emas boshqa nom berilsa nima sodir bo'ladi? Quyida tekshirib ko'ramiz:
Natija:
Info
Har doim ishga tushiriladigan .go fayl main package bo'lishi shart!
Lokal paket(package) yozish
Package'lar qanday ishlashini yaxshi tushinish uchun, o'zimizni lokal packageimizni yozib ko'ramiz. Bizni lokal package sifatida kichik matematik kutubxona yozib ko'ramiz. Quyida loyihaning fayl va katalog strukturasini keltirib o'tamiz.
Quyida struktura bo'yicha har br=ir fayllarni yozib chiqamiz.
package matematika
import "math"
func Qosh(a, b int) int {
return a + b
}
func Kvadrat(n int) int {
return int(math.Pow(float64(n), 2.0))
}
package main
import (
"fmt"
"mening_loyiham/matematika"
)
func main() {
fmt.Println(matematika.Kvadrat(3))
fmt.Println(matematika.Qosh(3, 2))
}
Yuqoridagi kodda "mening_loyiham/matematika" import qilingan. Bu yerda mening_loyiham go mod init mening_loyiham
buyrug'i orqali yaratilgan mening_loyiham nomli modul hisoblanadi. Agar modul yaratilmasa, lokal kod
paketlarini import qilib bo'lmaydi.
Endi esa main.go faylni ishga tushirib ko'ramiz:
Natija:
Packageni nomlash va funksiyalarni eksport qilish
Paket nomlash qoidalari
- Paket nomlari katalog nomi bilan bir xil bo'lishi tavsiya etiladi.
- Kichik harflardan foydalanish afzal (matematika, utils).
Funksiyalarni eksport qilish
Funksiyani eksport qilish deganda, biror package ichida yozilgan funksiyani dasturning boshqa qismida import qilib ishlatish imkoniyati nazarda tutiladi.
Go tilida funksiyalarni eksport qilish uchun ularning nomi bosh harf bilan boshlanishi kerak. Agar funksiya kichik harf bilan boshlangan bo'lsa, u faqat o'sha package ichida ishlaydi va tashqaridan chaqirib bo'lmaydi.
package matematika
import "math"
func Qosh(a, b int) int {
return a + b
}
func Kvadrat(n int) int {
return int(math.Pow(float64(n), 2.0))
}
func ayir(a, b int) int {
return a - b
}
Bu yerda ayir deb nomlangan funksiyani main.go ichida chaqirib bo'lmaydi. Quyidagi xatolik sodir boladi.