1-bo‘lim
Go bilan tanishuv
Go ni kim va nima uchun yaratgan, nomi qayerdan kelgan, u qayerda ishlatiladi va birinchi dastur qanday tuzilgan.
Ushbu bo‘lim mundarijasi
Go - Google da yaratilgan dasturlash tili. Uning bosh g'oyasi
oddiy: til shunchalik kichik bo'lsinki, uni bir hafta ichida to'liq
o'rganish mumkin bo'lsin, lekin katta server dasturlarini yozishga
yetarli bo'lsin.
Bugun Docker, Kubernetes, Terraform va minglab veb-xizmatlar
aynan Go da yozilgan.
Birinchi dastur #
package main
import "fmt"
func main() {
fmt.Println("Salom, dunyo!")
}
Salom, dunyo!
Beshta qator, va ularning har biri kerak. Keling, ularni ajratamiz.
| Qator | Ma'nosi |
|---|---|
package main | Bu fayl qaysi paketga tegishli |
import "fmt" | Formatlangan kiritish-chiqarish kutubxonasi |
func main() | Dastur shu funksiyadan boshlanadi |
fmt.Println(...) | Ekranga chiqarib, yangi qatorga o'tadi |
main nomi Go da ikki joyda maxsus. package main - bu kutubxona
emas, ishga tushadigan dastur degani. Uning ichidagi func main()
esa kirish nuqtasi.
Agar paketni package hisob deb nomlasangiz, u kutubxona bo'ladi va
uni to'g'ridan-to'g'ri ishga tushirib bo'lmaydi.
Nomi qayerdan kelgan #
Tilning rasmiy nomi - Go. Bor-yo'g'i ikki harf.
Ammo 2009-yilda sayt uchun go.org manzili band edi, shuning uchun
jamoa golang.org ni oldi. Odamlar qidiruvda "go" so'zini yozsa,
mutlaqo boshqa narsa chiqardi - shuning uchun "golang" deb qidirish
odat tusiga kirdi.
Shu tariqa golang nomi paydo bo'ldi. U hamma joyda ishlatiladi, lekin yaratuvchilar doim ta'kidlaydi: til nomi - Go.
Uni kim yaratgan #
Go ni bitta odam emas, uch kishi birga yaratgan. Va ularning uchalasi ham dasturlash tarixidagi mashhur nomlar.
Ken Tompson (1943-)
Unix operatsion tizimining yaratuvchisi. 1969-yilda Denis Ritchi bilan birga Unix ni yozgan, keyinroq `B` tilini - `C` ning bevosita ajdodini - ishlab chiqqan.
1983-yilda Tyuring mukofoti sovrindori bo'lgan. Rob Payk bilan birgalikda bugun butun internet ishlatadigan UTF-8 kodlashini o'ylab topgan.
Go ga u eng past darajadagi tajribani olib keldi: xotira, jarayonlar va tezlik haqidagi qirq yillik bilim.
Rob Payk (1956-)
Go ning eng ko'p tanilgan ovozi. Kanadalik dasturchi, Bell Labs da Ken Tompson bilan ishlagan va `Plan 9` operatsion tizimini yaratgan jamoada bo'lgan.
U uzoq yillar parallel dasturlash ustida ishlagan. Go dagi gorutinalar va kanallar - aynan o'sha izlanishlarning natijasi. Biz ularni 18- va 19-bo'limlarda o'rganamiz.
Robert Grizemer (1964-)
Kompilyatorlar mutaxassisi. Shveysariyalik dasturchi. Go dan oldin Google da `V8` - bugun `Chrome` va `Node.js` ishlatadigan JavaScript dvigateli - ustida ishlagan.
Undan ham oldin `Java HotSpot` virtual mashinasiga hissa qo'shgan. Go ning tez kompilyatsiya qilinishi ko'p jihatdan uning ishi.
Nega yangi til kerak bo'ldi #
2007-yilda Google da C++ da yozilgan ulkan dastur bor edi. Uni bir marta to'liq yig'ish (build qilish) soatlab vaqt olardi.
Rob Payk keyinchalik shunday eslaydi: uchalasi build tugashini kutib o'tirishgan va shu payt "agar biz noldan til yozsak, u qanday bo'lardi?" degan suhbat boshlangan.
Uch talab qo'yishdi:
- Tez kompilyatsiya - soniyalar, soatlar emas.
- Sodda til - kalit so'zlar kam, qoidalar oz.
- Parallellik tilning o'zida - kutubxona sifatida emas.
Loyiha o'sha yili 21-sentyabrda boshlandi. Ikki yildan keyin til ochiq kodga chiqarildi.
Go da atigi 25 ta kalit so'z bor. Taqqoslash uchun: C++ da yuzdan ortiq. Bu tasodif emas, balki asosiy qaror: tilga yangi narsa qo'shish uchun juda kuchli sabab kerak.
Vaqt chizig'i #
2012-yilda Go jamoasi kam uchraydigan va'da berdi: Go 1 da yozilgan to'g'ri dastur kelajakdagi hamma Go 1.x versiyalarida ishlaydi.
Shuning uchun 2012-yilgi kod bugun ham o'zgarishsiz kompilyatsiya bo'ladi. Bu darslikdagi misollar Go 1.24 da tekshirilgan, lekin ularning deyarli hammasi ancha eski versiyalarda ham ishlaydi.
Go qayerda ishlatiladi #
| Dastur | Nima qiladi |
|---|---|
Docker | Dasturlarni konteynerda ishga tushiradi |
Kubernetes | Minglab konteynerni boshqaradi |
Terraform | Server infratuzilmasini kod bilan quradi |
Prometheus | Tizim holatini kuzatadi |
Hugo | Statik saytlarni yig'adi |
Bu ro'yxatda bir qonuniyat bor: hammasi server dasturlari. Go aynan shu ish uchun yaratilgan - bir vaqtda minglab so'rovni qayta ishlaydigan xizmatlar uchun.
Go da o'yin yoki mobil ilova ham yozish mumkin, lekin bu uning kuchli tomoni emas.
Biroz kattaroq misol #
package main
import "fmt"
func main() {
ism := "Husanboy"
yosh := 25
shahar := "Namangan"
fmt.Println("Ism:", ism)
fmt.Printf("Yosh: %d\n", yosh)
fmt.Printf("%s - %s shahridan\n", ism, shahar)
}
Ism: Husanboy
Yosh: 25
Husanboy - Namangan shahridan
Bu yerda ikki yangi narsa bor:
:=- o'zgaruvchini e'lon qilib, darhol qiymat berish.Printf- shablon bo'yicha chiqarish.%dson,%ssatr o'rniga qo'yiladi.\n- yangi qator.
Println yangi qatorni o'zi qo'shadi, Printf esa qo'shmaydi - buni
\n bilan o'zingiz yozasiz.
gofmt - bahslar tugadi #
Ko'p tillarda jamoalar soatlab bahslashadi: qavs qayerda tursin, bo'shliqmi yoki tabulyatsiyami, qator uzunligi qancha bo'lsin.
Go da bu bahs butunlay yo'q, chunki tilga gofmt degan vosita
kiritilgan. U kodni yagona rasmiy ko'rinishga keltiradi.
gofmt -w main.go
Natijada dunyodagi hamma Go kodi bir xil ko'rinadi. Begona loyihani ochganingizda, format tanish bo'ladi.
Shuning uchun bu darslikdagi kod tabulyatsiya bilan tekislangan -
gofmt shunday qiladi.
Go nimaga o'xshaydi #
Go ni ko'pincha "soddalashtirilgan C" deb atashadi, lekin bu to'liq to'g'ri emas. Undan olingan va ataylab olinmagan narsalar bor:
| Olingan | Ataylab olinmagan |
|---|---|
| C ning tezligi va soddaligi | Sinflar va vorislik |
| Statik turlar | Istisnolar (try/catch) |
| Ko'rsatkichlar | Ko'rsatkich arifmetikasi |
| Avtomatik xotira tozalash | Konstruktorlar |
Java yoki C# dan kelgan bo'lsangiz, birinchi kunlar g'alati tuyuladi:
Go da class kalit so'zi umuman yo'q.
Uning o'rniga strukturalar (11-bo'lim) va interfeyslar (13-bo'lim) bor. Ular birgalikda xuddi shu ishni bajaradi, lekin boshqacha yo'l bilan - vorislik orqali emas, birlashtirish orqali.
Shoshilmang: 13-bo'limga yetganda bu yondashuv ko'p hollarda soddaroq ekani ayon bo'ladi.
Uchta e'lon uslubi #
package main
import "fmt"
func main() {
var birinchi string = "to'liq shakl"
var ikkinchi = "tur o'zi aniqlanadi"
uchinchi := "eng qisqa shakl"
fmt.Println(birinchi)
fmt.Println(ikkinchi)
fmt.Println(uchinchi)
}
to'liq shakl
tur o'zi aniqlanadi
eng qisqa shakl
Amalda deyarli har doim uchinchi shakl - := - ishlatiladi. Uni
keyingi bo'limda batafsil ko'ramiz.
- Go ni o'z kompyuteringizga o'rnating (2-bo'limda ko'rsatiladi).
Salom, dunyo!dasturini yozib ishga tushiring.package mainnipackage salomga o'zgartiring va xatoni o'qing.import "fmt"qatorini o'chirib, xato matnini ko'ring.- O'z ismingiz va shahringizni chiqaradigan dastur yozing.
PrintlnvaPrintffarqini bitta faylda ko'rsating.%do'rniga%syozib, natija nima bo'lishini ko'ring.- Faylni ataylab noto'g'ri tekislab,
gofmt -wni ishlatib ko'ring. - Go ning uch yaratuvchisidan biri haqida qisqacha o'qing.
- Docker yoki Kubernetes qaysi muammoni hal qilishini bilib oling.
Xulosa #
- Go ni Google da Ken Tompson, Rob Payk va Robert Grizemer yaratgan; loyiha 2007-yilda boshlanib, 2009-yilda ochiq kodga chiqarilgan.
- Sabab - C++ ning sekin kompilyatsiyasi va tillarning ortiqcha murakkabligi.
- Tilning rasmiy nomi - Go;
golangesa sayt manzilidan qolgan taxallus. - Har bir ishga tushadigan dastur
package mainvafunc main()dan iborat. Printlnyangi qator qo'shadi,Printfesa shablon bo'yicha chiqaradi va\nni o'zingiz yozasiz.gofmtkod formatini yagona qiladi - bahsga o'rin qolmaydi.- Go da sinf yo'q; uning o'rniga struktura va interfeys ishlatiladi.
- Go 1 va'dasi eski kodning ishlashda davom etishini kafolatlaydi.
Keyingi bo'limda Go ni o'rnatib, birinchi loyihani yaratamiz.
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.