Birinchi dasturimiz
Bu qismda terminalga matn ko'rinishida ma'lumot chiqaradigan birinchi Go dasturimizni yozamiz. Bu misol orqali Goda yozilgan dasturni qanday tuzilishini, qayerdan boshlanishini va kompilyator kodni qanday tekshirishini ko‘rib chiqamiz.
Kompyuteringizda birinchi-dastur nomli papka yarating. Oldingi darsda shu papkani yaratgan bo‘lsangiz, kod muharririda uni oching va papka ichida main.go faylini yarating.
main.go nomi Go kompilyatorining talabi emas. Faylni salom.go deb nomlasa ham bo'ladi. Muhimi ichidagi kod to‘g‘ri bo‘lsa yetarli.
Warning
Ayrim tizimlar fayl kengaytmasini yashiradi. Fayl tasodifan main.go.txt bo‘lib qolmaganiga e'tibor bering.
Birinchi dastur
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 dastur faylini ishga tushiradi. Kod to‘g‘ri bo‘lsa terminalda quyidagi natija chiqadi:
Qo‘shtirnoq ichidagi matn Println() funksiyasiga berilgan qiymat. Println() uni terminalga yozdi va oxiriga yangi qator qo‘shadi.
Kod qanday ishlaydi?
Endi kodni qatorma-qator ko‘rib chiqamiz.
package main
Har bir Go fayli package deklaratsiyasi bilan boshlanadi. package bir vazifaga tegishli Go fayllarini bir guruhga birlashtiradi. Bitta 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. Ishga tushadigan dasturda parametr qabul qilmaydigan va qiymat qaytarmaydigan main() funksiyasi bo‘lishi kerak. Aks holda kompilyator dasturning qayerdan boshlanishini bilmaydi.
import "fmt"
import boshqa paketdagi tayyor oldindan yozib qo'yilgan funksiyalarni dasturga qo'shish uchun kerak. Bu yerda Goni standart kutubxonasidagi fmt paketini import qildik.
fmt matn va boshqa qiymatlarni formatlash, terminalga chiqarish hamda terminaldan o‘qish uchun tayyor funksiyalarni o'zida saqlaydigan paket hisoblanadi. Bu darsda faqat fmt.Println() funksiyasidan foydalanamiz.
Goda import qilingan paketni ishlatilish majburiy. fmt import qilinib, undan foydalanilmasa kompilyator xato qaytaradi. Bu qoida kodda keraksiz qismlar bo'lishini oldini oladi.
func main()
func kalit so‘zi funksiya e’lon qilish uchun foydalaniladi. Funksiyalarni keyingi darslarda batafsil o‘rganamiz.
main paketidagi main() funksiyasi dasturning kirish nuqtasi (entry point) hisoblanadi. Operatsion tizim tayyor faylni ishga tushirgach, Go runtime 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 qismlar bo‘lmasa dastur ishini yakunlaydi.
fmt.Println("Salom, dunyo!")
Bu qatorda fmt paketidagi Println() funksiyasini chaqirdik. Nuqta chap tomondagi paket paket ichidagi funksiyalarga murojaat qilinayotganini bildiradi.
"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. Agar yangi qator kerak bo'lmasa, fmt.Print() dan keyin foydalanish mumkin.
Nuqtali vergul
Go sintaksisida nuqtali vergul mavjud, ammo kompilyator uni ko‘p qatorlarning oxiriga avtomatik qo‘shadi. Shu sababli Go kodida har bir amal oxiriga ; yozish shart emas.
Bu qoida kodni istalgan joydan qatorga bo‘lish mumkin degani emas. Masalan, ochuvchi jingalak qavsni noto‘g‘ri qatorga ko‘chirish kompilyatsiya xatosiga sabab bo'lishi mumkin. Shu sababli kodni gofmt bilan formatlash kerak bo'ladi.
go run
go run main.go buyrug‘i bajarilganda quyidagi jarayon yuz beradi:
- Go kompilyatori
main.gofaylini o‘qiydi. - Kompilyator sintaksis, e'lonlar, importlar va turlarni tekshiradi.
- Kod mashina kodiga kompilyatsiya qilinadi.
- Vaqtinchalik dastur fayli ishga tushiriladi.
Kompilyatsiya muvaffaqiyatsiz bo‘lsa, main() ishga tushmaydi. Demak, kompilyatsiya xatosi va dastur chiqargan natija ikki xil narsa: xato xabarini Go kompilyatori, Salom, dunyo! matnini esa bizning dasturimiz chiqaryapti.
Ishga tushadigan fayl yaratish
Dasturni alohida faylga kompilyatsiya qilish uchun quyidagi buyruqni bajaring:
Buyruq joriy papkada salom nomli ishga tushadigan 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 sinab ko‘rish uchun qulay. go build esa keyinroq ishga tushirish yoki boshqa muhitga ishga tushirish 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 boshqa insonga tushuntirish uchun yoziladi. Kompilyator izohni dastur amali sifatida bajarmaydi.
Bir qatorli izoh // bilan boshlanadi:
// 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. Odatda Goda izohlar uchun // ko‘proq ishlatiladi.
Ko'p 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
Satr boshlangan qo‘shtirnoq bilan yopilishi kerak. Qavs va jingalak qavslar ham juft bo‘lishi lozim.
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
Ishga tushadigan 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, dastur ishlamaydi.
Dastur kodini formatlash
Terminalda quyidagi buyruqni bajaring:
gofmt bo‘sh joylarni va boshqa Go qoidalariga zid kodlarni Go’ning standart qoidalariga keltiradi. -w o‘zgarishlarni main.go fayliga yozadi. Formatlash kodning mantig'ini to'g'rilaydi.
Formatlangan faylni yana ishga tushiring:
Natija o‘zgarmaydi:
Muhim tushunchalar
mainpaketining boshqa paketlardan asosiy farqi —maindasturning asosiy boshlanish qismi.go runvaqtinchalik dastur yaratib ishga tushiradi,go buildesa dasturni faylni qilib ko'rsatilgan joyga saqlaydi.
Keyingi darsda qiymatlarni nom bilan saqlash va ulardan qayta foydalanish uchun o‘zgaruvchilarni o‘rganamiz.