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.

🕑 12 daqiqa o‘qish 📄 900 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. O'rnatish
  2. Tekshirish
  3. Birinchi modul
  4. Papka tuzilishi
  5. go run va go build
  6. Boshqa tizim uchun yig'ish
  7. To'liq birinchi loyiha
  8. gofmt va go vet
  9. Muharrir
  10. Ko'p faylli dastur
  11. Xulosa

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.

TizimUsul
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:

Terminal
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 #

Terminal
go version

Javob taxminan shunday bo'ladi:

Natija
go version go1.24.13 linux/amd64

Agar "buyruq topilmadi" chiqsa, PATH sozlanmagan.

Sizning versiyangiz boshqacha bo'lishi mumkin

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:

Terminal
mkdir salom && cd salom
go mod init misol.uz/salom

Bu go.mod faylini yaratadi:

INI
module misol.uz/salom

go 1.24

misol.uz/salom - modulning nomi. U odatda kod turadigan manzil bo'ladi, masalan github.com/husanboy/salom.

Nega modul nomi manzilga o'xshaydi

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 #

Oddiy Go loyihasi salom/ go.mod modul nomi va Go versiyasi main.go package main - dastur shu yerda hisob/ o'z kutubxonangiz (ixtiyoriy) hisob.go package hisob

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.

Terminal
go run main.go

go run dasturni vaqtincha yig'ib, darhol ishga tushiradi va natijani ko'rsatadi. Fayl qoldirmaydi - o'rganish uchun eng qulayi.

Terminal
go build

go build esa haqiqiy ishga tushadigan fayl yaratadi: Linux da salom, Windows da salom.exe.

BuyruqNatijaQachon
go runIshlatadi, fayl qoldirmaydiO'rganish, tez sinash
go buildDastur faylini yaratadiTarqatish
go installFaylni ~/go/bin ga qo'yadiVositalarni o'rnatish
Bitta fayl - butun dastur

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:

Terminal
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:

Go
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)
}
Natija
Loyiha ishga tushdi
Tizim: linux
Yadrolar soni bir dan katta: true

runtime paketi dastur ishlayotgan muhit haqida ma'lumot beradi.

Nega yadro sonini to'g'ridan-to'g'ri chiqarmadik

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.

Terminal
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:

Go
ism := "Malika"
fmt.Printf("%d\n", ism)

Lekin go vet darhol ogohlantiradi: %d son uchun, satr uchun emas.

go vet ni odat qiling

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:

MuharrirIzoh
VS CodeRasmiy Go kengaytmasi bor, bepul
GoLandJetBrains mahsuloti, pullik
Neovimgopls 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:

Go
package main

import "fmt"

func salomla(ism string) string {
    return "Salom, " + ism + "!"
}

func main() {
    fmt.Println(salomla("Nodira"))
    fmt.Println(salomla("Husanboy"))
}
Natija
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.

Ishlatilmagan narsa - xato

Go da ishlatilmagan o'zgaruvchi yoki import shunchaki ogohlantirish emas, balki kompilyatsiya xatosi:

Go
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.

Amaliy topshiriq
  1. Go ni o'rnatib, go version bilan tekshiring.
  2. go mod init bilan yangi modul yarating.
  3. go.mod faylini ochib, ichidagini o'qing.
  4. go run bilan dasturni ishga tushiring.
  5. go build bilan fayl yig'ing va uni to'g'ridan-to'g'ri ishlating.
  6. GOOS=windows go build bilan boshqa tizim uchun yig'ing.
  7. Faylni ataylab noto'g'ri tekislab, gofmt -w ni ishlating.
  8. %d ga satr berib, go vet nima deyishini ko'ring.
  9. Ishlatilmagan o'zgaruvchi e'lon qilib, xatoni o'qing.
  10. 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 init bilan boshlanadi.
  • Bitta papka - bitta paket; papkadagi fayllar bir-birini import qilmasdan ko'radi.
  • go run tez sinash uchun, go build esa yagona ishga tushadigan fayl yaratadi.
  • GOOS va GOARCH bilan boshqa tizim uchun yig'ish mumkin.
  • gofmt formatni, go vet esa yashirin xatolarni to'g'rilaydi.
  • Ishlatilmagan import va o'zgaruvchi - xato, ogohlantirish emas.

Keyingi bo'limda o'zgaruvchilar va turlarni o'rganamiz.

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.