Birinchi dasturimiz
Bu darsda terminalga matn chiqaradigan birinchi Go dasturimizni yozamiz. Shu kichik misol orqali bajariladigan Go dasturi qanday tuzilishini, qayerdan boshlanishini va kompilyator kodni qanday tekshirishini ko‘rib chiqamiz.
Ish papkasini tayyorlash
Kompyuteringizda birinchi-dastur nomli papka yarating. Oldingi darsda shu papkani yaratgan bo‘lsangiz, kod muharririda uni oching. Papka ichida main.go faylini yarating.
Fayl nomidagi .go kengaytmasi bu Go manba fayli ekanini bildiradi. Bajariladigan dasturning asosiy fayliga ko‘pincha main.go nomi beriladi, ammo bu Go talabi emas. Fayl salom.go deb nomlansa ham, ichidagi kod to‘g‘ri bo‘lsa ishlaydi.
Warning
Ayrim tizimlar fayl kengaytmasini yashiradi. Fayl tasodifan main.go.txt bo‘lib qolmaganini tekshiring.
Birinchi kod
main.go fayliga quyidagi kodni yozing:
Faylni saqlang. Terminalda main.go joylashgan papkaga o‘ting va dasturni ishga tushiring:
go run faylni kompilyatsiya qiladi va hosil bo‘lgan vaqtinchalik dasturni ishga tushiradi. Kod to‘g‘ri bo‘lsa, terminalda quyidagi natija chiqadi:
Qo‘shtirnoq ichidagi matn Println() funksiyasiga uzatildi. Println() uni terminalga yozdi va oxirida yangi qator qo‘shdi. Matnni o‘zgartirsangiz, natija ham aynan shu matnga mos ravishda o‘zgaradi.
Kod qanday ishlaydi?
Endi kodni qatorma-qator ko‘rib chiqamiz.
package main
Har bir Go manba fayli package deklaratsiyasi bilan boshlanadi. Paket bir vazifaga tegishli Go fayllarini bir guruhga birlashtiradi. Bir papkadagi oddiy Go fayllari odatda bir xil paket nomiga ega bo‘ladi.
main — bajariladigan dastur uchun maxsus paket nomi. Kutubxona paketi boshqa kodga funksiyalar va turlar beradi. main paketi esa bajariladigan fayl yaratish uchun ishlatiladi.
Faqat package main yozish yetarli emas. Bajariladigan dasturda parametr qabul qilmaydigan va qiymat qaytarmaydigan main() funksiyasi ham bo‘lishi kerak. Aks holda kompilyator dasturning qayerdan boshlanishini topa olmaydi.
import "fmt"
import boshqa paketdagi tayyor imkoniyatlardan foydalanish uchun kerak. Bu yerda Go standart kutubxonasidagi fmt paketini import qildik. Standart kutubxona Go bilan birga o‘rnatiladigan paketlar to‘plamidir.
fmt matn va boshqa qiymatlarni formatlash, terminalga chiqarish hamda terminaldan o‘qish uchun funksiyalar beradi. Bu darsda faqat fmt.Println() funksiyasidan foydalanamiz.
Go import qilingan paket amalda ishlatilishini talab qiladi. fmt import qilinib, undan foydalanilmasa, kompilyator "fmt" imported and not used mazmunidagi xato qaytaradi. Bu qoida kodda keraksiz bog‘liqlik qolishining oldini oladi.
func main()
func kalit so‘zi funksiya e’lon qiladi. Funksiya — ma’lum vazifani bajaradigan, nomlangan kod qismi. Funksiyalarni keyingi darslarda batafsil o‘rganamiz.
main paketidagi main() funksiyasi dasturning kirish nuqtasi (entry point) hisoblanadi. Operatsion tizim tayyor faylni ishga tushirgach, Go bajarilish muhiti dasturni main.main funksiyasidan boshlaydi. { va } orasidagi qism funksiya tanasi deyiladi.
Bu misolda funksiya tanasida bitta amal bor. Amallar odatda yuqoridan pastga bajariladi. main() tugagach, boshqa ishlayotgan goroutine bo‘lmasa, dastur ham tugaydi. Goroutinelarni keyingi darslarda o‘rganamiz.
fmt.Println("Salom, dunyo!")
Bu qatorda fmt paketidagi Println() funksiyasini chaqirdik. Nuqta chap tomondagi paket orqali o‘ng tomondagi nomga murojaat qilinayotganini bildiradi.
Println nomi katta harf bilan boshlanadi. Go’da paket tashqarisidan foydalanish mumkin bo‘lgan nomlar katta harf bilan boshlanadi. Shu sababli fmt.Println boshqa paketdan chaqiriladi. Go katta-kichik harflarni farqlaydi: Println va println bir xil nom emas.
"Salom, dunyo!" — satr ko‘rinishidagi qiymat. U Println() funksiyasiga argument sifatida berilgan. Qo‘shtirnoqlar matn chegarasini bildiradi va natijaga qo‘shilmaydi. Println() argumentlarni chiqargach, yangi qator belgisini ham yozadi.
Nega nuqtali vergul yozilmadi?
Go grammatikasida nuqtali vergul mavjud, ammo kompilyator uni ko‘p qatorlarning oxiriga avtomatik qo‘shadi. Shu sababli Go kodida har bir amal oxiriga ; yozish odatiy emas. Qatorlarni Go sintaksisiga mos joyda ajratish yetarli.
Bu qoida kodni istalgan joydan qatorga bo‘lish mumkin degani emas. Masalan, ochuvchi jingalak qavsni noto‘g‘ri qatorga ko‘chirish kompilyatsiya xatosiga olib kelishi mumkin. gofmt qabul qilingan yozilish uslubini saqlashga yordam beradi.
go run ortida nima sodir bo‘ladi?
go run main.go buyrug‘i bajarilganda soddalashtirilgan holda quyidagi jarayon yuz beradi:
- Go vositasi
main.gofaylini o‘qiydi. - Kompilyator sintaksis, e’lonlar, importlar va turlarni tekshiradi.
- Kod mashina kodiga kompilyatsiya qilinadi.
- Vaqtinchalik bajariladigan fayl ishga tushiriladi.
- Dastur tugagach, vaqtinchalik faylni Go vositasi boshqaradi.
Kompilyatsiya muvaffaqiyatsiz bo‘lsa, main() ishga tushmaydi. Demak, kompilyatsiya xatosi va dastur chiqargan natija ikki xil narsa: xato xabarini Go vositasi, Salom, dunyo! matnini esa bizning dasturimiz chiqaryapti.
Bajariladigan fayl yaratish
Dasturni alohida faylga kompilyatsiya qilish uchun quyidagi buyruqni bajaring:
Buyruq joriy papkada salom nomli bajariladigan fayl yaratadi. Windows’da u salom.exe ko‘rinishida bo‘ladi. -o parametri chiqish faylining nomini belgilaydi.
macOS va Linux’da dasturni quyidagicha ishga tushiring:
PowerShell’da:
Ikkala holatda ham natija bir xil:
go run tezkor ishlab ko‘rish uchun qulay. go build esa keyinroq ishga tushirish yoki boshqa muhitga yetkazish mumkin bo‘lgan fayl yaratadi. Tayyor dastur ishlashi uchun odatda Go kompilyatori o‘rnatilgan bo‘lishi shart emas.
Izohlar
Izoh (comment) kodning vazifasi yoki yozilish sababini odamlarga tushuntiradi. Kompilyator izohni dastur amali sifatida bajarmaydi.
Bir qatorli izoh // bilan boshlanadi:
Bu parcha main() funksiyasi ichida ishlatilishi mumkin. // belgisidan qator oxirigacha bo‘lgan matn izoh hisoblanadi. Keyingi qatordagi fmt.Println() esa bajariladi.
Ko‘p qatorli izoh /* bilan boshlanib, */ bilan tugaydi:
Ko‘p qatorli izohning ichidagi matn ham bajarilmaydi. Amaliy Go kodida odatiy izohlar uchun // ko‘proq ishlatiladi. Izoh kodning o‘zidan bilinmaydigan sabab, cheklov yoki qarorni tushuntirganda foydali. Har bir oddiy qatorni qayta bayon qilish kodni o‘qishni qiyinlashtiradi.
Keng uchraydigan xatolar
Katta-kichik harfni almashtirish
Quyidagi chaqiruv noto‘g‘ri:
Go katta va kichik harflarni farqlaydi. To‘g‘ri nom fmt.Println. Real loyihada paket, funksiya yoki o‘zgaruvchi nomidagi bitta harf farqi ham boshqa nomga murojaat qiladi yoki kompilyatsiya xatosini keltirib chiqaradi.
Qo‘shtirnoq yoki qavsni yopmaslik
Quyidagi misol ataylab kommentariyaga olingan, chunki u kompilyatsiyadan o‘tmaydi:
Satr boshlangan qo‘shtirnoq bilan yopilishi kerak. Qavs va jingalak qavslar ham juft bo‘lishi lozim. Kompilyator ko‘rsatgan qatorni ham, undan oldingi qatorni ham tekshiring.
Keraksiz import qoldirish
import "fmt" yozilib, kodda fmt ishlatilmasa, dastur kompilyatsiya qilinmaydi. Keraksiz importni olib tashlang yoki paketdan amalda foydalaning. Ko‘p Go muharrirlari importlarni avtomatik tartibga solishi mumkin.
Noto‘g‘ri papkada buyruq bajarish
Terminal main.go joylashgan papkada bo‘lmasa, go run main.go faylni topa olmaydi. pwd yoki Get-Location bilan joriy papkani, ls yoki Get-ChildItem bilan undagi fayllarni tekshiring.
package main yoki main()ni unutish
Bajariladigan dastur uchun paket nomi main bo‘lishi va paketda to‘g‘ri ko‘rinishdagi main() funksiyasi mavjud bo‘lishi kerak. Ulardan biri yo‘q bo‘lsa, bajariladigan dastur to‘g‘ri yig‘ilmaydi.
Info
main.go fayl nomi an’ana, package main va func main() esa bajariladigan Go dasturining tuzilish qoidalaridir.
Dasturni formatlash
Terminalda quyidagi buyruqni bajaring:
gofmt bo‘sh joy va chekinishlarni Go’ning standart uslubiga keltiradi. -w o‘zgarishni main.go fayliga yozadi. Formatlash kodning mantiqini tuzatmaydi, lekin barcha Go loyihalarida bir xil ko‘rinishni saqlaydi va kod ko‘rib chiqishni yengillashtiradi.
Butun modulni formatlash, statik tahlil va testlarni bir tartibda bajarish Go kodini tekshirish vositalari darsida ko‘rsatiladi.
Formatlangan faylni yana ishga tushiring:
Natija o‘zgarmaydi:
Muhim tushunchalar
- Paket va modul bir xil tushuncha emas. Paket — bir papkada birga kompilyatsiya qilinadigan Go fayllari guruhi. Modul esa keyingi darslarda ko‘radigan, bir yoki bir nechta paketni va ularning bog‘liqliklarini boshqaradigan birlik.
mainpaketining boshqa paketlardan asosiy farqi — undan bajariladigan dastur yig‘iladi.main()funksiyasini Go bajarilish muhiti chaqiradi. Uni kod ichida qo‘lda chaqirish talab qilinmaydi.- Katta harf bilan boshlangan paket darajasidagi nom boshqa paketlarga ochiq bo‘ladi.
fmt.Printlnbuning birinchi misoli. go runvaqtinchalik dastur yaratib ishga tushiradi,go buildesa bajariladigan faylni saqlaydi.
Xulosa
Go’da bajariladigan dastur main paketidagi main() funksiyasidan boshlanadi. Boshqa paket imkoniyatidan foydalanish uchun import yoziladi. Bu darsda fmt.Println() yordamida terminalga matn chiqardik, kodni gofmt bilan formatladik va go run hamda go build o‘rtasidagi farqni ko‘rdik.
Keyingi darsda qiymatlarni nom bilan saqlash va ulardan qayta foydalanish uchun o‘zgaruvchilarni o‘rganamiz.