2-bo‘lim
Muhitni sozlash va birinchi loyiha
Go ni o'rnatish, go run va go build farqi, modul yaratish, papka tuzilishi hamda gofmt va go vet vositalari.
Ushbu bo‘lim mundarijasi
Go ni o'rnatish boshqa ko'p tillarga qaraganda soddaroq: bitta arxiv yoki bitta o'rnatuvchi, va tayyor. Alohida paket menejeri yoki virtual muhit kerak emas.
O'rnatish #
Rasmiy sayt - go.dev/dl. U yerdan tizimingizga mos faylni oling.
| Tizim | Usul |
|---|---|
| Windows | .msi o'rnatuvchisini ishga tushiring |
| macOS | .pkg fayli yoki brew install go |
| Linux | .tar.gz ni /usr/local ga yoying |
Linux uchun to'liq buyruq:
sudo tar -C /usr/local -xzf go1.24.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
export qatorini ~/.bashrc fayliga qo'shsangiz, u har safar
avtomatik ishlaydi.
Tekshirish #
go version
Javob taxminan shunday bo'ladi:
go version go1.24.13 linux/amd64
Agar "buyruq topilmadi" chiqsa, PATH sozlanmagan.
Go yiliga ikki marta - fevral va avgustda - yangilanadi. Sizda 1.25 yoki undan keyingisi bo'lishi mumkin.
Bu darslik uchun muhim emas: 1-bo'limda aytilgan Go 1 va'dasiga ko'ra, bu yerdagi kod har qanday Go 1.x da bir xil ishlaydi.
Birinchi modul #
Go da har bir loyiha - modul. Uni yaratish bitta buyruq:
mkdir salom && cd salom
go mod init misol.uz/salom
Bu go.mod faylini yaratadi:
module misol.uz/salom
go 1.24
misol.uz/salom - modulning nomi. U odatda kod turadigan manzil
bo'ladi, masalan github.com/husanboy/salom.
Go da kutubxona markaziy ombordan emas, to'g'ridan-to'g'ri manzildan
olinadi. go get github.com/rs/zerolog deganingizda, Go aynan o'sha
manzilga boradi.
Shuning uchun modul nomi ham manzil shaklida yoziladi. Agar kodni hech
kimga tarqatmasangiz, istalgan nom bo'laveradi - misol.uz/salom ham
to'g'ri ishlaydi.
Papka tuzilishi #
Muhim qoida: bitta papka - bitta paket. Papkadagi hamma .go
fayllari bir xil package qatoriga ega bo'lishi shart.
go run va go build #
Ikki buyruq bor va ular boshqa-boshqa ish qiladi.
go run main.go
go run dasturni vaqtincha yig'ib, darhol ishga tushiradi va
natijani ko'rsatadi. Fayl qoldirmaydi - o'rganish uchun eng qulayi.
go build
go build esa haqiqiy ishga tushadigan fayl yaratadi: Linux da
salom, Windows da salom.exe.
| Buyruq | Natija | Qachon |
|---|---|---|
go run | Ishlatadi, fayl qoldirmaydi | O'rganish, tez sinash |
go build | Dastur faylini yaratadi | Tarqatish |
go install | Faylni ~/go/bin ga qo'yadi | Vositalarni o'rnatish |
go build natijasi - yagona fayl. Uning ichida hamma kerakli
narsa bor: sizning kodingiz, standart kutubxona va ishga tushirish
muhiti.
Uni serverga ko'chirsangiz, u yerda Go o'rnatilgan bo'lishi
shart emas. Aynan shu sabab Go server dasturlari uchun juda
qulay: docker konteynerlari ham shuning uchun kichik chiqadi.
Boshqa tizim uchun yig'ish #
Go dagi eng yoqimli imkoniyatlardan biri - Linux kompyuterida Windows uchun dastur yig'ish:
GOOS=windows GOARCH=amd64 go build -o salom.exe
GOOS=darwin GOARCH=arm64 go build -o salom-mac
Hech qanday qo'shimcha vosita o'rnatish kerak emas.
To'liq birinchi loyiha #
Endi hammasini birlashtiramiz. main.go fayli:
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("Loyiha ishga tushdi")
fmt.Println("Tizim:", runtime.GOOS)
fmt.Println("Yadrolar soni bir dan katta:", runtime.NumCPU() > 1)
}
Loyiha ishga tushdi
Tizim: linux
Yadrolar soni bir dan katta: true
runtime paketi dastur ishlayotgan muhit haqida ma'lumot beradi.
runtime.NumCPU() har bir kompyuterda boshqacha son qaytaradi - 4,
8, 16. Agar shuni chiqarsak, bu darslikdagi kutilgan natija sizda
mos kelmasdi.
Shuning uchun taqqoslash natijasi chiqarildi: u deyarli hamma
zamonaviy kompyuterda true bo'ladi. Bu darslikdagi hamma misol
shu tamoyilga amal qiladi - chiqish har doim barqaror.
gofmt va go vet #
Go bilan birga bir nechta vosita keladi. Ikkitasi har kuni kerak.
gofmt -w main.go
go vet ./...
gofmt - formatni to'g'rilaydi. -w faylning o'ziga yozadi.
go vet - kompilyator sezmaydigan, lekin deyarli har doim xato
bo'lgan holatlarni topadi.
Masalan, quyidagi kod muammosiz kompilyatsiya bo'ladi:
ism := "Malika"
fmt.Printf("%d\n", ism)
Lekin go vet darhol ogohlantiradi: %d son uchun, satr uchun emas.
go vet kompilyatsiyaning bir qismi emas. Uni o'zingiz ishga
tushirasiz.
U topadigan xatolar juda alamli turdan: noto'g'ri Printf shabloni,
hech qachon ishlamaydigan taqqoslash, unutilgan WaitGroup. Bularning
hammasi dastur ishlab turganda, ko'pincha serverdagina sezilardi.
Kodni topshirishdan oldin go vet ./... ni ishlating.
Muharrir #
Har qanday matn muharriri ishlaydi, lekin quyidagilar Go ni yaxshi biladi:
| Muharrir | Izoh |
|---|---|
VS Code | Rasmiy Go kengaytmasi bor, bepul |
GoLand | JetBrains mahsuloti, pullik |
Neovim | gopls bilan ishlaydi |
Uchalasi ham gopls - rasmiy til serveridan foydalanadi, shuning
uchun imkoniyatlar deyarli bir xil.
Ko'p faylli dastur #
Bitta papkadagi hamma fayl bir paketga tegishli bo'ladi va ular bir-birini import qilmasdan ko'radi:
package main
import "fmt"
func salomla(ism string) string {
return "Salom, " + ism + "!"
}
func main() {
fmt.Println(salomla("Nodira"))
fmt.Println(salomla("Husanboy"))
}
Salom, Nodira!
Salom, Husanboy!
Bu kodni ikki faylga bo'lsangiz ham - main.go va salom.go -
hech narsa o'zgarmaydi, chunki ikkalasi ham package main.
Paketlar va ularni bo'lish qoidalarini 16-bo'limda batafsil ko'ramiz.
Go da ishlatilmagan o'zgaruvchi yoki import shunchaki ogohlantirish emas, balki kompilyatsiya xatosi:
import "os" // ishlatilmasa: "os" imported and not used
son := 5 // ishlatilmasa: declared and not used
Boshqa tillardan kelganlar buni dastlab qattiqqo'llik deb biladi. Sababi esa amaliy: ishlatilmagan import dasturni kattalashtiradi, ishlatilmagan o'zgaruvchi esa ko'pincha unutilgan xatoni bildiradi.
Vaqtincha kerak bo'lsa, _ = son deb yozish mumkin.
- Go ni o'rnatib,
go versionbilan tekshiring. go mod initbilan yangi modul yarating.go.modfaylini ochib, ichidagini o'qing.go runbilan dasturni ishga tushiring.go buildbilan fayl yig'ing va uni to'g'ridan-to'g'ri ishlating.GOOS=windows go buildbilan boshqa tizim uchun yig'ing.- Faylni ataylab noto'g'ri tekislab,
gofmt -wni ishlating. %dga satr berib,go vetnima deyishini ko'ring.- Ishlatilmagan o'zgaruvchi e'lon qilib, xatoni o'qing.
- Kodni ikki faylga bo'lib, baribir ishlashiga ishonch hosil qiling.
Xulosa #
- Go bitta arxivdan o'rnatiladi; virtual muhit yoki paket menejeri kerak emas.
- Har bir loyiha - modul; u
go mod initbilan boshlanadi. - Bitta papka - bitta paket; papkadagi fayllar bir-birini import qilmasdan ko'radi.
go runtez sinash uchun,go buildesa yagona ishga tushadigan fayl yaratadi.GOOSvaGOARCHbilan boshqa tizim uchun yig'ish mumkin.gofmtformatni,go vetesa yashirin xatolarni to'g'rilaydi.- Ishlatilmagan import va o'zgaruvchi - xato, ogohlantirish emas.
Keyingi bo'limda o'zgaruvchilar va turlarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.