Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go dasturlash tili
Go dasturlash tili va yaratililshi
Go nima?
Go (yoki Golang) — Google yaratgan zamonaviy dasturlash tili. U sodda sintaksis, tez kompilyatsiya, yuqori unumdorlik va oson parallellikni birlashtiradi. Shu sababli Go bugungi kunda backend, mikroxizmatlar, CLI dasturlar va DevOps vositalarini yaratishda eng ommabop tillardan biri hisoblanadi.
“
Go — tizim dasturlashning qulayligi, dinamik tillarning soddaligi va statik tillarning xavfsizligini birlashtiradi.
Go qanday paydo bo'ldi
2007-yilda Google muhandislari katta muammoga duch kelishdi. Kompaniyaning dasturlari tobora yiriklashib, millionlab foydalanuvchilarga xizmat ko'rsata boshladi. Ammo mavjud dasturlash tillari bunday miqyosdagi tizimlarni yaratishda turli qiyinchiliklarni keltirib chiqarardi.
Bir tomondan, C++ juda tez ishlardi, ammo kod yozish va kompilyatsiya qilish murakkab hamda sekin edi. Ikkinchi tomondan, Python sodda va qulay bo'lsa-da, katta yuklama ostida unumdorligi yetarli emas edi.
Shu sababli Google muhandislari ikkala tilning eng yaxshi jihatlarini birlashtiradigan yangi dasturlash tilini yaratishga qaror qilishdi. Natijada Go dasturlash tili dunyoga keldi.
Nima uchun C++ yetarli emas edi?
Google'ning ko'p xizmatlari C++ dasturlash tilida yozilgan edi. Bu til juda tez ishlaydi va katta tizimlar yaratish uchun kuchli imkoniyatlarga ega. Ammo loyihalar yiriklashgani sari C++ bilan ishlash tobora qiyinlashib bordi.
Sekin kompilyatsiya Google'dagi ayrim katta loyihalarda kichik bir o'zgarishni sinab ko'rish uchun kodni qayta kompilyatsiya qilish kerak bo'lardi. Bu jarayon ba'zan o'nlab daqiqagacha davom etardi. Natijada dasturchilar ko'p vaqtini kutish bilan o'tkazardi.
Murakkab sintaksis C++ juda ko'p imkoniyatlarga ega: pointerlar, manual xotira boshqaruvi, template'lar, ko'p turdagi meros olish va boshqa murakkab tushunchalar mavjud. Bu esa kodni yozish va qo'llab-quvvatlashni qiyinlashtirardi.
Parallellikni boshqarish qiyin Bir vaqtning o'zida ko'plab vazifalarni bajarish uchun C++ da odatda threadlardan foydalaniladi. Ammo threadlar bilan ishlash murakkab bo'lib, noto'g'ri foydalanish deadlock, race condition va xotira muammolariga olib kelishi mumkin.
Shu sababli Google dasturchilari tez ishlaydigan, ammo undan foydalanish osonroq bo'lgan tilni xohlashardi.
Nima uchun Python ham yechim bo'la olmadi?
Python esa C++ ning aksincha, juda sodda va tushunarli til edi. Unda dastur yozish tez, kodni o'qish esa oson. Shu sababli u ko'plab dasturchilar orasida mashhur edi.
Ammo Google kabi ulkan tizimlar uchun Python'ning ham ayrim cheklovlari bor edi.
Ishlash tezligi Python interpretatsiya qilinadigan til bo'lgani uchun odatda kompilyatsiya qilinadigan tillarga qaraganda sekinroq ishlaydi. Katta yuklama ostida bu sezilarli farqni keltirib chiqarishi mumkin.
Parallellikdagi cheklov Python'da GIL (Global Interpreter Lock) mavjud. Shu sababli CPU talab qiladigan vazifalarda bir nechta protsessor yadrosidan to'liq foydalanish har doim ham oson emas.
Xatolarni kech aniqlashPython dinamik turlarga ega. Bu dastur yozishni tezlashtiradi, ammo ayrim xatolar faqat dastur ishga tushirilgandan keyin aniqlanadi. Katta loyihalarda bunday holatlar qo'shimcha muammolar tug'dirishi mumkin.
Google'ga esa ham sodda, ham yuqori unumdorlikka ega til kerak edi.
Go bu muammolarni qanday hal qildi?
Google muhandislari yangi til yaratishda bitta maqsadni ko'zladilar: C++ ning tezligini Python'ning soddaligi bilan birlashtirish. Shuning uchun Go quyidagi xususiyatlar bilan yaratildi:
✓Tez kompilyatsiya — hatto katta loyihalar ham soniyalar ichida kompilyatsiya qilinadi.
✓Sodda sintaksis — tilni o'rganish va kodni o'qish oson.
✓Yuqori unumdorlik — dastur mashina kodiga kompilyatsiya qilinadi va tez ishlaydi.
✓Concurrency— goroutine va channel yordamida minglab vazifalarni bir vaqtda boshqarish mumkin
✓Xotira xavfsizligi — garbage collector ko'plab xotira muammolarini avtomatik hal qiladi.
✓Katta loyihalar uchun qulaylik — kodni yozish, o'qish va qo'llab-quvvatlash ancha sodda.
Natijada 2007-yilda Go ustida ish boshlandi va 2009-yilda u ochiq manba (Open Source) sifatida e'lon qilindi. Bugungi kunda Go bulut texnologiyalari, mikroxizmatlar, DevOps vositalari va yuqori yuklamali server dasturlarini yaratishda keng qo'llaniladigan tillardan biridir.
Yaratuvchilar
Ken Thompson
Unix operatsion tizimini yaratuvchilardan biri va B dasturlash tilining muallifi (C tilining ajdodi). Turing mukofoti sohibi.
Rob Pike
Unix tizimi va UTF-8 standarti loyihalariga ham hissa qo'shgan. Go'ning bosh me'mori va g'oyachi rahbari.
Robert Griesemer
Compiler design, distributed systems va programming language specification sohalarida ishlagan muhandis, yirik tizimlar uchun amaliy software engineering rivojiga hissa qo‘shgan.
Ularning tajribasi Go'ga ulkan asos bo'ldi. Ken Thompson Unix va C tilining ildizlarini yaratgan bo'lsa, Rob Pike UTF-8 — bugungi barcha matnlar saqlanadigan standart — muallifi. Robert Griesemer esa zamonaviy virtual mashina texnologiyasini chuqur bilardi.
Go ning qisqacha tarixi
2007
Robert Griesemer, Rob Pike va Ken Thompson Google'da yangi til g'oyasini muhokama qila boshladi. Afsona bo'yicha, g'oya C++ loyihasining uzoq kompilyatsiyasini kutish vaqtida tug'ilgan.
2009
Go open source sifatida e'lon qilindi. Butun dunyo dasturchilari sinab ko'ra boshladi. Jamoa tez o'sdi, birinchi GopherCon konferentsiyasi uchun poydevor qo'yildi.
2012
Go 1.0 rasmiy chiqdi. Muhim va'da berildi: Go 1.x da yozilgan kod doim ishlaydi — backward compatibility kafolati. Bu dasturchilar orasida katta ishonch uyg'otdi.
2015
Docker va Kubernetes Go'da yozilganligi dunyo e'tiborini tortdi. Go cloud infratuzilmalarining tili sifatida tan olindi.
2018
Go modul tizimi (go.mod) joriy etildi. Tashqi kutubxonalar va versiyalarni boshqarish tubdan osonlashdi.
2022
Go 1.18 — Generics qo'shildi. Bu Go tarixidagi eng katta va ko'p kutilgan yangilanish bo'ldi. Xato boshqaruvi ham yaxshilandi.
Bugun
Go dunyo bo'yicha millionlab dasturchilarga ega. Stack Overflow so'rovlarida eng sevimli va eng yaxshi maoshli tillar orasida. 6 oyda bir marta yangi versiya chiqadi. AI va machine learning kabi yangi sohalarda ham o'z o'rnini topmoqda.
Go qayerlarda ishlatiladi?
Go faqat Google uchun yaratilgan bo'lsa-da, bugungi kunda butun dunyodagi eng muhim texnologiyalar uning asosida qurilgan. Docker va Kubernetes — bugungi cloud infratuzilmasining asosi — Go'da yozilgan.
misollar:
Soha
Misol
Cloud va infratuzilma
Docker, Kubernetes, Terraform
Backend API serverlar
Uber, Dropbox, Twitch backend
Buyruq qatori vositalari
GitHub CLI, Hugo, cobra
Tarmoq va xavfsizlik
Cloudflare, Tailscale
Ma'lumotlar bazasi
CockroachDB, InfluxDB, etcd
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go dasturlash tili
Go vs Python, Java, C/C++ — taqqoslash
Nima uchun taqqoslash kerak?
Yangi dasturlash tilini o‘rganmoqchi bo‘lgan har bir dasturchi ko‘pincha bitta savolga duch keladi: “Nega aynan shu til?” Bu savol ayniqsa Go uchun muhim — chunki Go nisbatan yangi til va ko'pchilik u haqida Python, Java yoki C/C++ ga nisbatan kamroq biladi.
Ammo bu taqqoslash “qaysi til yaxshiroq?” degan bahs uchun emas. Asl maqsad — har bir tilning o‘z kuchli tomonlari va qo‘llanish sohalari borligini tushunishdir. To‘g‘ri vazifa uchun to‘g‘ri vositani tanlagan dasturchi har doim samaraliroq ishlaydi.
Go yaratuvchilari ham uni “eng yaxshi til” sifatida emas, balki aniq muammo uchun yaratishgan: katta miqyosli va parallel ishlaydigan tizimlarni sodda, tez va ishonchli yozish. Shu nuqtai nazardan qaraganda, Go’ni boshqa tillar bilan solishtirish uning nima uchun yaratilganini yaxshiroq tushunishga yordam beradi.
“
Har bir dasturlash tili ma’lum bir muammoni hal qilish uchun tug‘iladi. Go ham istisno emas — u Google’da o‘sha davrda duch kelgan muammolardan kelib chiqdi.
Quyida Go dasturlash tilini uning asosiy raqiblari — C/C++, Java va Python bilan to‘rt asosiy mezon bo‘yicha solishtiramiz. Bu mezonlar tilning real dunyodagi qo‘llanishini tushunish uchun muhim hisoblanadi.
Har bir tilni baholashda quyidagi jihatlarga e’tibor qaratiladi:
O‘rganish qulayligi Yangi dasturchi tilni qanchalik tez va oson o‘zlashtira oladi.
Ishlash tezligi Dastur bajarilish vaqtida CPU va xotira resurslaridan qanchalik samarali foydalanishi hamda uning umumiy execution time (bajarilish vaqti) qanchalik past ekanligini ifodalaydi.
Parallellik (concurrency) Tizimning bir vaqtning o‘zida bir nechta vazifalarni (tasks) parallel yoki concurrent tarzda boshqarish qobiliyati hamda bu jarayonning dasturchi uchun qanchalik sodda, nazorat qilinadigan va xavfsiz ekanligini ifodalaydi.
Ishlab chiqarish tezligi Dasturchi real loyiha yoki mahsulotni ishlab chiqish jarayonida feature’larni implement qilish tezligi, development workflow samaradorligi hamda debugging va integration jarayonlariga sarflanadigan umumiy vaqtni anglatadi.
Har bir mezon bo‘yicha Go tilining qanday pozitsiyada ekanini keyingi bo‘limlarda batafsil ko‘rib chiqamiz. Taqqoslash yakunida esa eng muhim savol — “Qaysi dasturlash tilini qachon tanlash kerak?” — ga asosli va aniq javob beriladi.
C/C++ bilan taqqoslash
Go ning eng yaqin "qarindoshi" — bu C tilidir. Aslida Go ning sintaksisi, tuzilishi va falsafasi ko'p jihatdan C dan ilhom olgan. Go'ning yaratuvchisi Ken Thompson ayni paytda C tilining ham yaratuvchisi ekanligi bejiz emas. Demak, Go — C ning merosxo'ri, lekin uning kamchiliklarini bartaraf etgan yangi avlod.
Go ning eng yaqin "qarindoshi" — C tili. Go sintaksisi, dastur tuzilishi va dizayn falsafasining ko‘plab jihatlari C tilidan ilhom olgan. Bu bejiz emas: Go yaratuvchilaridan biri Ken Thompson Unix tizimini yaratgan muhandislardan biri bo‘lib, C tili shakllangan muhitda ishlagan. Shuningdek, Go yaratuvchisi Rob Pike ham Unix falsafasining davomchisi hisoblanadi.
C
Kuchli tomoni: Maksimal tezlik va to'liq nazorat
C kompyuter resurslari ustidan deyarli to'liq nazorat beradi. Dasturchi xotira, protsessor va boshqa tizim resurslari bilan bevosita ishlaydi. Natijada juda tez va samarali dasturlar yaratish mumkin.
Shu sababli Linux yadrosi, Windows yadrosi, qurilma drayverlari, o'yin dvigatellari va ko'plab mikrokontroller dasturlari aynan C tilida yozilgan.
Kamchiliklari:
Xotirani qo'lda boshqarish
C da xotirani ajratish (malloc) va bo'shatish (free) dasturchining o'zi zimmasida bo'ladi.
Agar ajratilgan xotira vaqtida bo'shatilmasa — memory leak yuz beradi. Agar xotira noto'g'ri boshqarilsa — segmentation fault kabi xatolar sabab dastur kutilmaganda to'xtab qolishi mumkin.
Kichik dasturlarda bu muammo unchalik sezilmaydi. Ammo loyiha kattalashgani sari xotira bilan ishlash eng murakkab vazifalardan biriga aylanadi.
Zamonaviy imkoniyatlar kam
C juda sodda va minimalistik til. Unda generics, o'rnatilgan xatolarni boshqarish mexanizmi, map, list kabi tayyor ma'lumotlar tuzilmalari mavjud emas.
Natijada ko'plab imkoniyatlarni dasturchining o'zi yozishi yoki tashqi kutubxonalardan foydalanishi kerak bo'ladi. Bu esa dastur yozishni ham, uni keyinchalik qo'llab-quvvatlashni ham murakkablashtiradi.
C++
Kuchli tomoni: Kuchli va moslashuvchan
C++ C tilining imkoniyatlarini yanada kengaytirdi. Unga ob'ektga yo'naltirilgan dasturlash (OOP), template, STL (Standard Template Library) va boshqa ko'plab zamonaviy imkoniyatlar qo'shildi. Natijada C++ yuqori unumdorlikni saqlab qolgan holda murakkab dasturlarni yaratishga imkon berdi. Bugungi kunda Unreal Engine, Google Chrome, ko'plab grafik dasturlar, ma'lumotlar bazalari va yuqori unumdor serverlar C++ yordamida ishlab chiqilgan.
Kamchiliklari:
Kompilyatsiya sekin
C++ ning imkoniyatlari kengaygani sari kompilyatsiya jarayoni ham murakkablashdi. Ayniqsa, millionlab qator koddan iborat yirik loyihalarda bu katta muammoga aylandi.
Masalan, Google ichidagi ayrim C++ loyihalarini to'liq kompilyatsiya qilish 30 daqiqadan 1 soatgacha vaqt olardi. Dasturchi bitta qator kodni o'zgartirgach, natijani ko'rish uchun uzoq kutishga majbur bo'lardi. Bu esa ishlab chiqish jarayonini sezilarli darajada sekinlashtirardi.
Tilning murakkabligi
C++ juda kuchli til, ammo shu bilan birga juda murakkab ham.
Ko'pincha bitta muammoni hal qilishning bir nechta usuli mavjud. OOP, template, ko'p turdagi meros olish (inheritance), pointerlar, manual xotira boshqaruvi va undefined behavior kabi tushunchalar tilni o'rganish va undan xavfsiz foydalanishni ancha qiyinlashtiradi.
Natijada, hatto tajribali dasturchilar ham ba'zan kutilmagan xatolarga duch kelishadi.
Parallellik bilan ishlash qiyin
Ko'p yadroli protsessorlar ommalashgach, bir vaqtning o'zida bir nechta vazifani bajarish muhim ahamiyat kasb eta boshladi.
C++ da buning uchun odatda thread, mutex, condition_variable kabi vositalardan foydalaniladi. Biroq ularni noto'g'ri ishlatish juda oson.
Natijada race condition, deadlock, data race kabi aniqlash qiyin bo'lgan xatolar yuzaga kelishi mumkin. Ayniqsa, katta jamoalarda yozilgan yirik loyihalarda bunday xatolarni topish va tuzatish ko'p vaqt talab qiladi.
Shunday bo'lsa-da, C va C++ bugungi kungacha eng muhim va eng kuchli tizimli dasturlash tillari qatorida turadi. Ular tezlik, unumdorlik va apparat ustidan yuqori darajadagi nazorat talab qilinadigan ko'plab sohalarda hanuzgacha asosiy tanlov hisoblanadi.
Biroq 2000-yillarga kelib dasturiy ta'minot hajmi keskin oshdi. Millionlab qator kod, katta dasturchilar jamoalari, ko'p yadroli protsessorlar va bulutli infratuzilmalar yangi muammolarni yuzaga chiqardi. C va C++ bu vazifalarni bajarishga qodir edi, ammo ularning murakkabligi, sekin kompilyatsiyasi va parallellik bilan ishlashdagi qiyinchiliklari ishlab chiqish jarayonini sekinlashtirardi.
Shu sababli Google muhandislari C va C++ ning yuqori unumdorligini saqlab qolgan, biroq soddaroq, tez kompilyatsiya qilinadigan va zamonaviy server dasturlashiga mos yangi til yaratishga kirishdilar. Natijada Go dasturlash tili dunyoga keldi.
Go da C/C++ ga nisbatan nimalar yaxshilandi?
C/C++ da muammo
Xotirani qo'lda boshqarish (malloc/free). Bir xato — butun dastur uchiriladi.
Go da yechim
Avtomatik xotira boshqaruvi — GC (Garbage Collector) o'zi tozalaydi.
C/C++ da muammo
Kompilyatsiya 30 daqiqa — 1 soat. Produktivlik past.
Go da yechim
Katta loyihalar ham soniyalar ichida kompilyatsiya bo'ladi.
C/C++ da muammo
Thread va mutex bilan parallellik — xato qilish oson, deadlock xavfi yuqori.
Go da yechim
Goroutine va channel — parallellik qulay, xavfsiz va tushunarli.
C/C++ da muammo
O'rganish ko'p yillar talab qilishi mumkin. Murakkab sintaksis, undefined behavior.
Go da yechim
25 ta kalit so'z. Haftalarda o'rganib, samarali ishlab ketish mumkin.
Ammo Go C/C++ ni to'liq almashtira olmaydi. Operatsion tizim yadrosi, qurilma drayverlar, o'yin dvigatellari kabi to'g'ridan-to'g'ri apparat bilan ishlash kerak bo'lgan sohalarda C/C++ hamon ustun. Go esa bu darajadagi past darajali nazoratni taqdim etmaydi.
“
Go — C ga o'xshash, lekin zamonaviy. Biz C ning soddaligini saqlab, uning xavfli tomonlarini olib tashladik
Xulosa: Go vs C/C++
Go tanlang, agar siz web serverlar, API’lar, cloud vositalari, CLI dasturlar yoki mikroservislar ishlab chiqayotgan bo'lsangiz. Go bu sohalarda tez ishga tushish, sodda sintaksis va parallel ishlashni oson boshqarish orqali katta qulaylik beradi.
C/C++ tanlang, agar siz operatsion tizimlar, qurilma drayverlari, o'yin dvigatellari, real-time tizimlar yoki to'g'ridan-to'g'ri apparat bilan ishlash talab qilinadigan past darajadagi dasturlar yozayotgan bo'lsangiz. Bu tillar sizga maksimal nazorat va unumdorlikni beradi.
Java bilan taqqoslash
Java — Go ga eng yaqin raqib tillardan biri. Ikkalasi ham statik tiplashga ega, ikkalasi ham korporativ darajadagi tizimlar uchun keng qo'llaniladi va ikkalasida ham avtomatik axlat yig'uvchi (garbage collector) mavjud. Shunga qaramay, ular orasidagi farqlar juda muhim.
Kuchli tomonlari:
Bir marta yoz, hamma joyda ishlat
Java kodi JVM (Java Virtual Machine) ustida ishlaydi. Shu sababli bitta Java dasturini Windows, macOS yoki Linux tizimlarida hech qanday o'zgartirishsiz ishga tushirish mumkin. Bu yondashuv korporativ muhitda katta afzallik beradi, chunki platformaga bog'liqlikni kamaytiradi.
Ulkan ekotizim
Java 30 yildan ortiq tarixga ega bo'lgan til. Uning atrofida juda katta ekotizim shakllangan: Spring, Hibernate, Maven, Gradle kabi yuzlab professional framework va kutubxonalar mavjud. Bugungi kunda bank tizimlari, korporativ dasturlar va hatto Android ilovalarining katta qismi Java ekotizimiga tayanadi.
Kamchiliglari:
Og'ir va sekin ishga tushish
Java dasturini ishga tushirish uchun avval JVM yuklanadi. Bu jarayon Go kabi kompilyatsiya qilingan tillarga nisbatan ko'proq vaqt talab qiladi. Ayniqsa mikroservislar va serverless muhitlarda bu sezilarli muammo bo'lishi mumkin, chunki tez-tez ishga tushib-to'xtaydigan servislar uchun “startup time” muhim ahamiyatga ega.
Ko'proq xotira sarfi
JVM o'zi ham ma'lum miqdorda xotira talab qiladi. Shu sababli Java ilovalari odatda Go dasturlariga nisbatan ko'proq RAM ishlatadi. Bu farq ayniqsa konteyner (Docker, Kubernetes) muhitlarida sezilarli bo'ladi, chunki resurslar qat'iy chegaralangan bo'ladi.
Verbose (ortiqcha yozuvli) sintaksis
Java'da oddiy dastur yozish uchun ham ko'proq “boilerplate” kod talab qilinadi. Masalan, oddiy “Salom, dunyo” dasturi ham class va public static void main kabi majburiy tuzilmani o'z ichiga oladi.
Go esa shu kabi vazifalarni ancha ixcham sintaksis bilan ifodalaydi.
Parallellikning murakkabligi
Java'da parallel dasturlash uchun Thread, ExecutorService, synchronized kabi bir nechta past darajadagi mexanizmlarni chuqur tushunish talab etiladi. Noto'g'ri ishlatilganda esa deadlock yoki boshqa sinxronizatsiya muammolari yuzaga kelishi mumkin.
Go esa bu jarayonni ancha soddalashtiradi va ko'p hollarda engil “goroutine” modeli bilan ishlash imkonini beradi.
Eng oddiy misol — "Salom dunyo" dasturi. Ikki tilda qancha kod yozish kerakligini ko'rib chiqamiz:
JAVA
public class Main { public static void main(String[] args) { System.out.println("Salom dunyo!"); }}
JVM yuklanishi — ishga tushish sekin (1-5 soniya). Serverless da jiddiy muammo.
Go da yechim
To'g'ridan-to'g'ri millisekundlar ichida ishga tushadi. JVM kerak emas.
Java da muammo
JVM xotirasi — 100-200 MB dan boshlaydi. Konteyner muhitida qimmat.
Go da yechim
Bitta binary fayl — 10-20 MB. Xotira sarfi minimal.
Java da muammo
Verbose sintaksis — oddiy ishlar uchun ham ko'p kod yozish kerak.
Go da yechim
Minimal sintaksis — 25 ta kalit so'z. Kam kod, ko'p ish.
Java da muammo
Thread, ExecutorService, synchronized — murakkab parallellik.
Go da yechim
go kalit so'zi — goroutine bilan sodda parallellik.
Ammo Java ham hali Go to'liq almashtira olmagan sohalar mavjud.
Masalan, Android ilovalar ekotizimi uzoq yillar davomida Java (hozirda ko'proq Kotlin) atrofida shakllangan. Shuningdek, yirik korporativ tizimlar — banklar, sug'urta kompaniyalari va ERP platformalari — bugungi kunda ham asosan Java ekotizimiga tayanadi.
Buning asosiy sababi Java’ning juda katta va yetuk ekotizimga ega ekanligidir. Ayniqsa Spring Framework kabi kuchli vositalar murakkab biznes logikani tez va ishonchli qurishga imkon beradi.
Shu nuqtai nazardan qaraganda, Go ko'plab yangi tizimlar uchun ideal tanlov bo'lsa ham, Java o'zining barqarorligi va ulkan infratuzilmasi bilan korporativ dunyoda hanuzgacha kuchli o'rnini saqlab qolmoqda.
“
Java va Go bir-birining raqibi emas — ular turli muammolarni hal qiladi. Go tezkor, yengil servislar uchun, Java esa ulkan, murakkab korporativ tizimlar uchun.
Xulosa: Go vs Java
Go tanlang, agar siz mikroservislar, cloud-native dasturlar, yengil va tez API serverlar, CLI vositalar yoki konteyner muhitida ishlaydigan tizimlar yaratmoqchi bo'lsangiz. Go bu yo'nalishlarda sodda sintaksis, tez ishga tushish va samarali parallellik bilan ajralib turadi.
Java tanlang, agar siz Android ilovalar bilan ishlayotgan bo'lsangiz, yirik korporativ tizimlar (bank, sug'urta, ERP) ustida ishlasangiz yoki mavjud Java loyihasiga qo'shilayotgan bo'lsangiz. Ayniqsa Spring ekotizimi kabi yetuk vositalar Java’ni murakkab biznes tizimlari uchun juda kuchli tanlovga aylantiradi.
Python bilan taqqoslash
Python — bugungi kunda eng mashhur dasturlash tillaridan biri. U oddiy sintaksisi va tez o'rganilishi bilan ajralib turadi.
Bugungi kunda sun'iy intellekt, ma'lumotlar tahlili, avtomatlashtirish, skript yozish va tez prototiplash kabi sohalarning katta qismi Python ekotizimi asosida qurilgan.
Go va Python esa ko'pincha bir-biriga qarama-qarshi tillar sifatida qaraladi. Ularning falsafasi, ishlash modeli va maqsadi tubdan farq qiladi:
Python — tez yozish, qulaylik va moslashuvchanlikka urg'u beradi Go — tez ishlash, samaradorlik va tizim darajasidagi ishonchlilikka urg'u beradi
Shu sababli bu ikki til ko'pincha bir xil muammo uchun emas, balki turli bosqichlar va turli ehtiyojlar uchun ishlatiladi.
Kuchli tomonlari:
Eng oson o'rganish
Python sintaksisi inson tiliga juda yaqin bo'lib, eng tushunarli dasturlash tillaridan biri hisoblanadi. Shu sababli yangi boshlovchi hatto birinchi kunning o'zidayoq oddiy ishlaydigan dastur yoza oladi.
Aynan shu qulaylik sababli Python ko'pincha maktab lar, universitetlar va dasturlash kurslarida birinchi til sifatida o'rgatiladi.
AI va ilm-fan uchun ideal
Python ekotizimi sun'iy intellekt va ma'lumotlar bilan ishlashda yetakchi hisoblanadi. NumPy, Pandas, TensorFlow, PyTorch kabi kuchli kutubxonalar aynan Python atrofida shakllangan.
Shu sababli machine learning, data science va ilmiy tadqiqotlar sohasida Python hali ham eng asosiy tillardan biri bo'lib qolmoqda.
Tezkor prototiplash
Python g'oyalarni tez sinab ko'rish uchun juda qulay. Bir necha qator kod bilan ishlaydigan prototip yaratish mumkin.
Bu esa startaplar va tadqiqotchilar uchun katta afzallik bo'lib, mahsulot g'oyasini tez tekshirish imkonini beradi.
Kamchiliklari:
Sekin ishlash tezligi
Python interpretatsiya qilinadigan til bo'lib, kod bajarilish vaqtida qatorma-qator talqin qilinadi. Shu sababli u kompilyatsiya qilingan tillarga, xususan Go ga nisbatan ancha sekin ishlaydi.
Katta yuklamali tizimlarda yoki millionlab so'rovlarni qayta ishlashda bu farq sezilarli bo'lishi mumkin.
GIL — parallellik cheklovi
Python'da Global Interpreter Lock (GIL) mavjud. Bu mexanizm bir vaqtning o'zida faqat bitta thread Python kodini bajarishini ta'minlaydi.
Natijada, ko'p yadroli protsessorlardan to'liq foydalanish cheklanadi. Go esa goroutine modeli orqali barcha yadro resurslaridan samarali foydalanadi.
Dinamik tiplash xavfi
Python dinamik tiplashga ega: o'zgaruvchining turi ishga tushish vaqtida aniqlanadi. Bu yozishni osonlashtiradi, lekin katta loyihalarda yashirin xatolarga olib kelishi mumkin.
Ko'pincha bunday xatolar faqat dastur ishga tushgandan keyin aniqlanadi. Go esa bunday xatolarni kompilyatsiya vaqtidayoq ushlab qoladi.
Deployment murakkabligi
Python dasturini serverga joylashtirish uchun interpretator, dependency'lar va virtual muhitni to'g'ri sozlash kerak bo'ladi.
Go'da esa aksincha — bitta kompilyatsiya qilingan binary fayl yetarli bo'lib, uni hech qanday qo'shimcha sozlamasiz ishga tushirish mumkin.
Go da Python ga nisbatan nimalar yaxshilandi?
Python da muammo
10-100x sekinroq. Katta trafik ostida server javob bera olmay qoladi.
Go da yechim
Kompilyatsiya qilinadi — mashina kodi tezligida ishlaydi.
Python da muammo
GIL — 8 ta protsessor yadrosidan faqat 1 tasi ishlatiladi.
Go da yechim
Goroutine — barcha protsessor yadrolaridan to'liq foydalanadi.
Python da muammo
Tur xatolari ishlash vaqtida bilinadi — foydalanuvchi topadi.
Go da yechim
Tur xatolari kompilyatsiya vaqtida bilinadi — dasturchi ekranda ko'radi.
Python da muammo
Deployment — interpreter, dependency, virtual muhit o'rnatish kerak.
Go da yechim
Bitta binary fayl — hech qanday o'rnatishsiz serverda ishlaydi.
Ammo shuni ham unutmaslik kerakki, Python hali ham ko‘plab sohalarda Go tomonidan to‘liq almashtirilmagan va hatto raqobat ham qila olmaydigan darajada ustun.
Eng katta ustunliklardan biri — sun’iy intellekt va machine learning ekotizimi. Bugungi kunda TensorFlow, PyTorch, scikit-learn kabi eng muhim kutubxonalar aynan Python atrofida shakllangan. Bu ekotizim shunchalik katta va yetukki, u hozircha boshqa tillarga to‘liq ko‘chib o‘tmagan.
Shuningdek, ilmiy tadqiqotlar, ma’lumotlar tahlili va tezkor skriptlar yozish sohalarida Python hanuzgacha eng qulay va eng ko‘p ishlatiladigan til hisoblanadi. Uning sodda sintaksisi va boy kutubxonalar ekotizimi tadqiqotchilar va data analystlar uchun katta qulaylik yaratadi.
Shu sababli Go tizim darajasidagi dasturlar, mikroservislar va server infratuzilmasida kuchli bo‘lsa ham, Python ilmiy va AI ekotizimida hali ham yetakchi o‘rinni saqlab qolmoqda.
“
Python o'rganish uchun ajoyib til. Lekin server katta yuklanma ostida ishlashi kerak bo'lsa, Go ga o'tish vaqti keldi.
Umumiy taqqoslash jadvali
Oldingi qismlarda har bir tilni alohida ko'rib chiqdik. Endi ularni bir joyda — bitta jadvalda taqqoslaymiz. Bu jadval sizga qaysi til qaysi mezon bo'yicha qancha ball olishini ko'rsatadi.
MEZON
GO
C/C++
JAVA
PYTHON
O'rganish osonligi
Oson
Qiyin
O'rta
Eng oson
Ishlash tezligi
Juda tez
Eng tez
Tez
Sekin
Parallellik
Goroutine
Qiyin
O'rta
GIL cheklovi
Xotira sarfi
Minimal
Minimal
Ko'p (JVM)
O'rta
Xotira xavfsizligi
Avtomatik (GC)
qo'lda
Avtomatik (GC)
Avtomatik (GC)
Tur tizimi
Statik
Statik
Statik
dinamik
Deployment
1 binary fayl
1 binary fayl
JVM kerak
Muhit kerak
Ishga tushish tezligi
Millisekundlar
Millisekundlar
Sekin (JVM)
Tez
Ekotizim hajmi
O'sib bormoqda
katta
Ulkan
Ulkan (AI)
Qaysi til qaysi soha uchun?
GO — IDEAL SOHALARI
›Web API va mikroservislar
›Cloud infratuzilma vositalari
›CLI dasturlar
›Yuqori trafik serverlar
›DevOps va SRE vositalari
C/C++ — IDEAL SOHALARI
›Operatsion tizim yadrosi
›Qurilma drayverlar
›O'yin dvigatellari
›Mikrokontrollerlar
›Real-time tizimlar
JAVA — IDEAL SOHALARI
›Korporativ backend tizimlar
›Android ilovalar
›Bank va moliya tizimlari
›Spring ekotizimi
›Big Data (Hadoop, Spark)
PYTHON — IDEAL SOHALARI
›Sun'iy intellekt va ML
›Ma'lumot tahlili
›Ilmiy tadqiqotlar
›Avtomatlashtirish skriptlar
›Tezkor prototiplash
“
To'g'ri asbobni to'g'ri joyda ishlatish — bu professional dasturchi belgisi. Hech bir til hamma muammoni hal qila olmaydi.
Hech bir til boshqasidan mutlaqo yaxshi emas. Har biri o'z sohasida eng yaxshi. Go siz uchun ideal bo'lishi mumkin — agar tez, yengil, parallel ishlaydigan server dasturlari yozmoqchi bo'lsangiz. Ammo AI loyihasi uchun Python, Android uchun Java, qurilma drayveri uchun C/C++ — bular hamon o'z o'rnida.
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go dasturlash tili
O'rnatish va muhitni sozlash
Go muhiti
“
Muhit — bu ko'rinmas, lekin har bir narsani ushlab turadigan poydevor. Dasturchi uni unutadi, faqat u ishlamay qolganda eslaydi. Shuning uchun uni boshidanoq tushunib olish — keyingi muammolarning oldini oladi.
Ko‘pchilik yangi dasturlash tilini o‘rganishni boshlaganda birinchi navbatda uni tezda yuklab olib o‘rnatishga shoshiladi. Bu tabiiy hol — darhol kod yozishni boshlash istagi har bir dasturchida bo‘ladi.
Lekin shu yerda bir daqiqa to‘xtab, muhim bir savolni o‘zimizga beraylik:
Go o‘rnatilganda kompyuterimizga aslida nima qo‘shiladi?
Bu savol oddiy ko‘rinsa ham, juda muhim. Chunki dasturlash tilini faqat “ishlatish” emas, balki uning qanday ishlashini tushunish — haqiqiy dasturchini shakllantiradi.
Agar biz bu savolga javobni bilmasdan turib Go’ni o‘rnatib yuborsak, bu ko‘r-ko‘rona foydalanishga o‘xshaydi. Bunday yondashuv esa keyinchalik muammo yuzaga kelganda chalkashlikka olib keladi: “Nima uchun bu ishlamayapti?”, “Qayerda xato qildim?” degan savollar paydo bo‘ladi.
Shuning uchun biz boshqacha yo‘l tutamiz: avval Go’ning ichki tuzilmasini tushunamiz, keyin esa uni kompyuterimizga o‘rnatamiz.
Go'ni rasmiy saytidan yuklab o'rnatganingizda kompyuteringizga uchta asosiy komponent o'rnatiladi:
⚙️ Go kompilyatori (Compiler) Siz yozgan Go manba kodini (source code) kompyuter bajarishi mumkin bo‘lgan mashina kodiga (machine code) aylantiruvchi dastur. go build buyrug‘i bajarilganda aynan kompilyator bajariladigan (executable) faylni yaratadi. go run esa kodni vaqtinchalik kompilyatsiya qilib, darhol ishga tushiradi.
📦 Standart kutubxona (Standard Library) Go bilan birga yuzdan ortiq standart paketlar o‘rnatiladi. HTTP server yaratish, JSON bilan ishlash, fayllarni o‘qish va yozish, kriptografiya, tarmoq dasturlash kabi ko‘plab vazifalarni qo‘shimcha kutubxonalar o‘rnatmasdan bajarish mumkin. Bu Go'ning eng katta afzalliklaridan biridir.
🔧 Go vositalari (Go Toolchain) Go dasturlarini yaratish va boshqarish uchun kerak bo‘ladigan buyruqlar to‘plami. Masalan, go build, go run, go test, go fmt va go mod buyruqlari Go bilan birga avtomatik o‘rnatiladi. Ular yordamida loyihani kompilyatsiya qilish, dasturni ishga tushirish, testlarni bajarish, kodni formatlash va modullarni boshqarish amalga oshiriladi.
Yuklab olish va o'rnatish
O'rnatish
Quyidagi yorliqlardan (tab) kompyuteringizdagi operatsion tizimni tanlang va ko‘rsatmalarini bajaring.
Linux — Go dasturchilari orasida eng ko‘p ishlatiladigan operatsion tizimlardan biridir. Buning sababi shundaki, internetdagi serverlar va production muhitlarning katta qismi aynan Linux'da ishlaydi. Shu sababli development jarayonini ham Linux'da olib borish - ishlab chiqish va production muhiti o‘rtasidagi farqlarni kamaytiradi, hamda dasturlarni serverga joylashtirishni ancha osonlashtiradi.
Linux'ga Go'ni o‘rnatishning bir nechta usuli mavjud: distributivning paket menejeri orqali yoki Go'ning rasmiy arxivini qo‘lda o‘rnatish. Ushbu qo‘llanmada biz rasmiy arxiv usulini tavsiya qilamiz, chunki u har doim Go'ning eng so‘nggi barqaror (stable) versiyasini taqdim etadi, turli Linux distributivlarida bir xil tarzda ishlaydi va rasmiy hujjatlardagi ko‘rsatmalar bilan ham to‘liq mos keladi.
Ko'p distributivlarning o'z paket omborida (apt, yum kabi) Go ning eskirgan versiyasi bo'ladi. Shu sababli rasmiy saytdan yuklab o'rnatish tavsiya etiladi.
1
Eski Go versiyasini olib tashlang (agar mavjud bo'lsa)
Agar kompyuteringizda Go'ning avvalgi versiyasi o‘rnatilgan bo‘lsa, yangisini o‘rnatishdan oldin uni olib tashlang. Bu turli versiyalar o‘rtasidagi ziddiyatlar va kutilmagan muammolarning oldini oladi.
$_ TERMINAL
sudo rm -rf /usr/local/go
2
Arxitekturangizni aniqlang
Go arxivini yuklab olishdan oldin, kompyuteringiz qaysi arxitektura da ishlashini bilish kerak:
$_ TERMINAL
uname -m
quydadiga oxshash natija olasiz:
TEXT
x86_64
bu amd64 degani
Aksariyat kompyuterlar x86_64(amd64) arxitekturasidan foydalanadi. Agar siz Raspberry Pi, Apple Silicon (M1, M2, M3 va keyingi) yoki boshqa ARM protsessorli qurilmadan foydalanayotgan bo‘lsangiz, natijada aarch64 (arm64) arxitekturasi ko‘rsatiladi.
3
Go arxivini yuklab oling
Go'ning rasmiy yuklab olish sahifasidan Linux uchun .tar.gz arxivini yuklab oling. Yoki, uni to‘g‘ridan-to‘g‘ri terminal orqali ham yuklab olishingiz mumkin:
Go'ning versiya raqami vaqt o'tishi bilan yangilanib boradi. Buyruqni bajarishdan oldin rasmiy yuklab olish sahifasidan eng so‘nggi barqaror (stable) versiya nomini tekshiring va buyruqdagi versiya raqamini shunga mos ravishda almashtiring.
4
Arxivni /usr/local katalogiga o‘rnating
Endi yuklab olingan .tar.gz arxivini /usr/local katalogiga ochamiz. Bu Go'ni Linux'ga o‘rnatish uchun tavsiya etilgan standart joy hisoblanadi.
$_ TERMINAL
sudo tar -C /usr/local -xzf go1.26.4.linux-amd64.tar.gz
Ushbu buyruqni bajarish uchun sudo kerak bo‘ladi, chunki /usr/local katalogiga yozish administrator (root) huquqini talab qiladi.
5
Go o‘rnatilgan katalogning bin papkasini PATH environment variable ga qo‘shing
Go o‘rnatilgandan so‘ng terminal go buyrug‘ini topa olishi uchun Go o‘rnatilgan katalogdagi bin papkasini PATH muhit o‘zgaruvchisiga qo‘shish kerak. Shundan so‘ng go buyrug‘ini terminalning istalgan joyidan ishga tushirishingiz mumkin.
Buning uchun foydalanayotgan shell'ingizning konfiguratsiya fayliga quyidagi qatorni qo‘shing.
Shundan so‘ng go buyrug‘ini terminalning istalgan joyidan ishga tushirishingiz mumkin.
Agar qaysi shell'dan foydalanayotganingizni bilmasangiz, terminalda quyidagi buyruqni bajaring:
echo $SHELL
Buyruq natijasida foydalanayotgan shell nomi (masalan, bash, zsh yoki fish) ko‘rsatiladi. Ko‘pgina Linux distributivlarida standart shell — Bash hisoblanadi.
6
O‘rnatilganini tekshiring
Agar PATH ga o‘zgartirish kiritgan bo‘lsangiz, terminalni yoping va qayta oching. So‘ngra quyidagi buyruqni bajarib, Go muvaffaqiyatli o‘rnatilganini tekshiring:
$_ TERMINAL
go version
Muvaffaqiyatli natija:
TEXT
go version go1.22.3 linux/amd64
Agar command not found: go yoki go: command not found xatosi chiqsa, terminalni qayta oching. Muammo davom etsa, PATH o‘zgarishi yuklanganini tekshirish uchun shell konfiguratsiya faylingizni qayta yuklang (masalan, Bash uchun source ~/.bashrc) yoki Go'ning bin katalogi PATH ga to‘g‘ri qo‘shilganini tekshiring.
macOS'da Go'ni o‘rnatishning ikki usuli mavjud: rasmiy .pkg o‘rnatuvchisi yoki Homebrew paket menejeri orqali. Ikkala usul ham tavsiya etiladi — qaysi birini tanlash esa sizning ish uslubingizga bog‘liq.
📦 Rasmiy .pkg o‘rnatuvchisi
Afzalliklari
✓Grafik o‘rnatuvchi orqali bir necha marta bosish bilan o‘rnatiladi.
✓PATH muhit o‘zgaruvchisi avtomatik sozlanadi.
✓Yangi boshlovchilar uchun eng qulay usul.
Kamchiligi
✗Yangi versiya chiqqanda uni qo‘lda yuklab olib qayta o‘rnatish kerak.
🍺 Homebrew
Afzalliklari
✓Terminal orqali bitta buyruq bilan o‘rnatiladi.
✓Yangilash juda oson: brew upgrade go
✓Homebrew orqali o‘rnatilgan boshqa dasturlar bilan bir xil usulda boshqariladi.
Kamchiligi
✗Avval Homebrew paket menejeri o‘rnatilgan bo‘lishi kerak.
Protsessor arxitekturasini aniqlang
Go'ni yuklab olishdan oldin Mac kompyuteringiz qaysi protsessor arxitekturasidan foydalanishini aniqlashingiz kerak. Apple hozirda ikki turdagi protsessorli Mac kompyuterlarni ishlab chiqaradi.
🍎 Apple Silicon (M1, M2, M3 va keyingi)
2020-yildan boshlab ishlab chiqarilgan Mac kompyuterlari Apple Silicon protsessorlaridan foydalanadi. Agar sizda shunday Mac bo‘lsa, Go'ning darwin-arm64 versiyasini yuklab oling.
💻 Intel protsessor
2020-yilgacha ishlab chiqarilgan aksariyat Mac kompyuterlari Intel protsessorlaridan foydalanadi. Agar sizda Intel asosidagi Mac bo‘lsa, Go'ning darwin-amd64 versiyasini yuklab oling.
1
Go'ning rasmiy yuklab olish sahifasini oching
Brauzeringizda go.dev/dl sahifasini oching. Featured downloads bo‘limidan macOS uchun mos .pkg o‘rnatuvchisini yuklab oling.
📌Apple Silicon (M1, M2, M3 va keyingi) uchun: go1.26.x.darwin-arm64.pkg
📌Intel protsessorli Mac uchun: go1.26.x.darwin-amd64.pkg
Versiya raqami vaqt o'tishi bilan yangilanadi. Eng so'nggi barqaror (stable) versiyani tanlang.
2
O‘rnatuvchini ishga tushiring
Yuklab olingan .pkg faylni ikki marta bosing. O‘rnatish oynasi ochilgach, ko‘rsatmalarga amal qilib Continue va Install tugmalarini bosib davom eting.
O‘rnatish jarayonida macOS administrator parolini so‘rashi mumkin. Bu normal holat bo‘lib, dastur tizimga o‘rnatilishi uchun administrator ruxsati talab qilinadi.
3
O‘rnatilganini tekshiring
O‘rnatish tugagach, Terminal dasturini oching. Uni Spotlight orqali ham ishga tushirishingiz mumkin:
⌘ + Space → Terminal → Enter
So‘ng quyidagi buyruqni bajaring:
$_ TERMINAL
go version
Muvaffaqiyatli natija:
TEXT
go version go1.26.4 darwin/arm64
Agar go: command not found yoki shunga o‘xshash xato chiqsa, Terminal oynasini yopib qayta oching va buyruqni yana bir marta bajaring. .pkg o‘rnatuvchisi PATH muhit o‘zgaruvchisini avtomatik sozlaydi, ammo bu o‘zgarish yangi Terminal sessiyasida kuchga kiradi.
Endi Go kompyuteringizga muvaffaqiyatli o‘rnatildi va ishlashga tayyor. Keyingi bobda birinchi Go dasturini yozib, uni ishga tushirishni o‘rganamiz.
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go dasturlash tili
Birinchi dastur — Hello, World!
Go o'rnatildi, muharrir tayyor. Endi birinchi Go dasturini yozamiz va ishga tushiramiz.
Dasturlash olamida deyarli barcha dasturlash tillarini o‘rganish "Hello, World!" dasturidan boshlanadi. Bu an'ana o‘nlab yillar davomida saqlanib kelmoqda. Dastur juda oddiy bo‘lsa-da, muhim vazifani bajaradi: Go kompilyatori, terminal va kod muharriri birgalikda to‘g‘ri ishlayotganini amalda tekshirib ko‘rasiz.
”
Buni yangi musiqa asbobini sinab ko‘rishga o‘xshatish mumkin. Hech kim birinchi kuni murakkab kuy chalishni boshlamaydi. Avval bitta nota chiqarib, asbob soz va ishlayotganiga ishonch hosil qiladi. Bizning birinchi "notamiz" ham aynan Hello, World! dasturi bo‘ladi.
Birinchi faylni yaratish
Har bir Go dasturi .go kengaytmali faylda yoziladi. Shuning uchun avvalo shunday fayl yaratamiz. Terminalni oching va quyidagi buyruqlarni ketma-ket bajaring:
Endi quyidagi buyruq orqali hello papkasini matn muharriringizda oching:
$_ TERMINAL
code .
Bu buyruq joriy papkani Visual Studio Code dasturida ochadi.
Ushbu buyruq Visual Studio Code o‘rnatilgan va code terminal buyrug‘i yoqilgan bo‘lsa ishlaydi. Aks holda, hello papkasini VS Code orqali qo‘lda ochishingiz mumkin.
hello papkasini matn muharririda ochganingizdan so'ng, chap tomondagi Explorer (fayllar ro'yxati) bo'limidan main.go faylini tanlang. Fayl ustiga bir marta bosishingiz bilan u tahrirlash oynasida ochiladi:
Kodni yozib bo'lgach, faylni saqlang. Buning uchun Ctrl + S (Windows/Linux) yoki ⌘ + S (macOS) tugmalarini bosing.
Kodni nusxa ko'chirmay, qo'lda yozing. Har bir belgi qo'l ostidan o'tganda miya yaxshiroq eslab qoladi — bu dasturlashni o'rganishning eng samarali usuli.
Dasturni ishga tushurish
Kodni yozib, faylni saqlaganingizdan so'ng, terminalga qayting va quyidagi buyruqni bajaring:
$_ TERMINAL
go run main.go
Agar hamma narsani to'g'ri bajargan bo'lsangiz, terminalda quyidagi natija chiqadi:
TEXT
Hello, World!
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go qanday ishlaydi?
Source code nima?
i
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go qanday ishlaydi?
Kompilyatsiya nima?
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go qanday ishlaydi?
Go kompilyatori nima qiladi?
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go qanday ishlaydi?
Go runtime haqida sodda tushuncha
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go qanday ishlaydi?
Go dasturi qanday ishga tushadi?
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Go ekotizimi nima?
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Standart kutubxona
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Go toolchain
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Testing va quality tools
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Dokumentatsiya: go.dev va pkg.go.dev
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Go ekotizimi bilan tanishuv
Community paketlar
a
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Muhitni sozlash
Go'ni o'rnatish
q
Go Dasturlash Tili (Go Core)›Go bilan tanishuv›Birinchi Go dasturi
go faylini yaratish
a
Go Dasturlash Tili (Go Core)›Go Fundamentals›Go dasturining tuzilishi
Go fayli qanday yoziladi?
a
Go Dasturlash Tili (Go Core)›Go Fundamentals›Go dasturining tuzilishi
Izohlar: // va /* */
a
Go Dasturlash Tili (Go Core)›Go Fundamentals›Go dasturining tuzilishi
Go'da nuqtali vergul masalasi
a
Go Dasturlash Tili (Go Core)›Go Fundamentals›Go dasturining tuzilishi
gofmt va kod ko'rinishi
a
Go Dasturlash Tili (Go Core)›Go Fundamentals›Ma'lumot Turlari (Data Types)
Qiymat va ma'lumot turi
Dasturlashda kompyuterga nafaqat maʼlumotni uzatish, balki uning nima ekanligini ham tushuntirish kerak. Shu sababli, har bir dasturchi qiymat va maʼlumot turi oʻrtasidagi farqni yaxshi bilishi shart.
Qiymat
Dasturlarni ikki asosiy qismdan tashkil topgan deb tasavvur qilish mumkin:
Ma’lumotlar
Ma’lumotlar ustida bajariladigan amallar
Ushbu sahifa asosan shu ikki asosiy qismdan birinchisiga — ma’lumotlar(data)ga qaratiladi.
Dastur ichida ma’lumotlar turli xil usullarda saqlanishi mumkin. Ma’lumotning eng oddiy birligi esa qiymat hisoblanadi.
Qiymat — bu aniq bir ma’lumot bo‘lagi hisoblanadi. Masalan, u son yoki matn bo‘lishi mumkin. 5, 5.2 va "Hello, World!" qiymatlarga misol bo‘la oladi.
Har bir qiymat ma’lum bir toifa(type)ga tegishli bo‘ladi. Bu toifa ma’lumot turi(data type) deb ataladi. ushbu darslik davomida biz ko‘plab ma’lumot turlari bilan tanishamiz. Ulardan dastlabkilari — son(number) va satr(string) turlaridir.
4 va 3.3 kabi raqamli qiymatlar sonlar hisoblanadi. Qo‘shtirnoq ichida yozilgan belgilar ketma-ketligi, masalan "Hello, World!", satr deb ataladi. Chunki u harflar va belgilar ketma-ketligidan tashkil topadi.
Satrlar odatda qo‘shtirnoq ichida yoziladi.
Go Dasturlash Tili (Go Core)›Go Fundamentals›Ma'lumot Turlari (Data Types)
Roadmap
Sahifa 01: Data Type nima? • Type tushunchasi • Static typing • Type safety
Sahifa 12: Best Practices • int yoki int64? • float32 yoki float64? • uint qachon? • byte va rune qachon?
Sahifa 13: Amaliy mashqlar
Sahifa 01: Value nima? Sahifa 02: Literal nima? Sahifa 03: Integer literals Sahifa 04: Floating-point literals Sahifa 05: Boolean literals Sahifa 06: String literals Sahifa 07: Value va Type Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›O'zgaruvchilar va O'zgarmaslar
O'zgaruvchilar
O‘zgaruvchilarGo dasturlash tilidaham, boshqa dasturlash tillaridagi kabi eng asosiy tushunchalaridan biri hisoblanadi. Ular ma’lumotlarni saqlash uchun konteyner vazifasini bajaradi va kompyuter xotirasidagi ma’lum bir joy bilan bog‘lanadi.
O‘zgaruvchi ichida saqlanadigan qiymat ma'lum bir ma’lumot turiga tegishli bo‘lishi mumkin. Shuningdek, bu qiymat dastur bajarilishi davomida o‘zgarishi ham mumkin.
O'zgarruvchi
Xotiraning nomlangan qismi bo'lib, ma'lum bir tur(type)ga mansub bo'lgan qiymatnivaqtincha saqlash uchun qo'llaniladi.
Aynan shu xususiyat bizga dastur ichida ma’lumotlarni saqlash, ulardan foydalanish va ular ustida turli amallar bajarish imkonini beradi.
Go dasturlash tilida o‘zgaruvchidan foydalanishdan oldin, u avval e’lon qilinishi kerak.
O'zgaruvchi e'lon qilish
Oddiy qilib aytganda, o‘zgaruvchini e’lon qilish — bu kompyuter xotirasida qiymat saqlash uchun joy ajratish degani.
Go dasturlash tilida o'zgaruvchilarni e'lon qilishning bir necha xil usullari mavjud! Xar bir e'lon qilish usuli o'zgaruvchidan qanday foydalanish kerakligini ma'lum darajada ifodalab beradi!
Quyida o'zgaruvchi e'lon qilishning xar-bir usulini ko'rib chiqamiz va ularning qaysi holatda ishlatilishi maqsadga muvofiq ekanini tushunib olamiz.
var key wordi
Go da o‘zgaruvchilarni e’lon qilishning asosiy usullaridan biri — var kalit so‘zidan foydalanishdir. var orqali o‘zgaruvchi nomi, uning turi va kerak bo‘lsa boshlang‘ich qiymati ko‘rsatiladi.
Odatda var yordamida o‘zgaruvchi e’lon qilish funksiyaning boshida yoki funksiyadan tashqarida qo‘llanadi. Funksiyadan tashqarida o‘zgaruvchi e’lon qilish esa nisbatan kamroq uchraydi va odatda paket darajasidagi qiymatlar uchun ishlatiladi.
Tur(Type) va qiymat(Value) bilan e’lon qilish
Go dasturlash tilida o'zgaruvchi e'lon qilishning eng to'liq usuli var key wordi orqali amalga oshiriladi. Buning uchun var kalit so‘zi, aniq tur va qiymat biriktirish ishlatiladi:
Sintaksiso'zgaruvchi e'lon qilishning eng to'liq usuliGO
var variable_nametype = qiymat
var - o'zgaruvchi e'lon qilish uchun ishlatiladigan key word
variable_name - yaratilayotgan o'zgaruvchi nomi
type - o'zgaruchi o'zida saqlashi mumkin bo'lgan qiymat turi
= - assingment operatori
qiymat - o‘zgaruvchiga belgilangan turga mos bo'lgan boshlang'ich qiymat
o'zgaruvchiga o'zlashitirlayotgan qiymat turi, o‘zgaruvchi uchun kutilayotgan turga mos bo'lshligi kerak
misol:
GO
var age int = 26
Bu yerda x — o‘zgaruvchi nomi, int — o‘zgaruvchining turi, 10 esa unga biriktirilgan boshlang‘ich qiymatdir.
Tur(Type)ni qoldirib ketish
Yuqoridagi usulda, agar = belgisining o‘ng tomonidagi qiymat turi o‘zgaruvchi uchun kutilayotgan turga mos bo‘lsa, bunday holatda = belgisining chap tomonidagi tur(type)ni qoldirib ketsakham bo'ladi. Go bu turni avtomatik aniqlay oladi.
misol:
GO
var age = 26
Bu kodda age nomli o‘zgaruvchi e’lon qilinadi va unga 25 qiymati beriladi. Go 25 butun son literali ekanini ko‘rib, age o‘zgaruvchisining turini avtomatik ravishda int deb belgilaydi.
Ya’ni yuqoridagi yozuv amalda quyidagi e’lon bilan bir xil ma’noni anglatadi:
GO
var age int = 26
Bu usul kodni biroz qisqaroq yozishga yordam beradi, lekin o‘zgaruvchining turi baribir Go tomonidan aniq belgilanadi.
Qiymatsiz e’lon qilish
Ba’zan o‘zgaruvchini e’lon qilish kerak bo‘ladi, lekin unga darhol qiymat biriktirish shart bo‘lmaydi. Bunday holatda var kalit so‘zi bilan o‘zgaruvchining turi ko‘rsatiladi, ammo = belgisi va uning o‘ng tomonidagi qiymat yozilmaydi.
masalan:
GO
var age int
Bu yerda age nomli int turidagi o‘zgaruvchi e’lon qilindi, lekin unga aniq qiymat biriktirilmadi.
Bunday holatda Go o‘zgaruvchiga shu tur uchun oldindan belgilangan zero value qiymatini beradi. int turi uchun bu qiymat 0 hisoblanadi.
Yani, yuqoridagi e'lon age o‘zgaruvchisi int turida yaratilganini va boshlang‘ich holatda 0 qiymatga ega bo‘lishini bildiradi.
Bu usul o‘zgaruvchining turi oldindan aniq bo‘lgan, lekin uning haqiqiy qiymati keyinroq belgilanadigan holatlarda qo‘llanadi.
Bir nechta o‘zgaruvchini e’lon qilish
var yordamida bir vaqtning o‘zida bir nechta o‘zgaruvchini e’lon qilish mumkin. Bunday holatda o‘zgaruvchilar bir xil turga ega bo‘lishi yoki Go tomonidan turli turlarda aniqlanishi mumkin.
Agar o‘zgaruvchilar bir xil turga ega bo‘lsa, ularning turi oxirida bir marta yoziladi:
GO
var x, y int = 10, 20
Bu yerda x va y nomli ikkita o‘zgaruvchi e’lon qilindi. Ularning ikkalasi ham int turiga ega. x ga 10, y ga esa 20 qiymati biriktirildi.
Agar o‘zgaruvchilarga boshlang‘ich qiymat berilmasa, ular ko‘rsatilgan turning zero value qiymatini oladi:
GO
var x, y int
Bu holatda x va y o‘zgaruvchilari int turida e’lon qilinadi va ikkalasi ham boshlang‘ich holatda 0 qiymatga ega bo‘ladi.
Bir nechta o‘zgaruvchini e’lon qilishda ularning turlari har xil bo‘lishi ham mumkin. Bunday holatda Go qiymatlarga qarab har bir o‘zgaruvchining turini avtomatik aniqlaydi:
GO
var x, y = 10, "hello"
Bu yerda x o‘zgaruvchisi int, y esa string turida bo‘ladi. Chunki 10 — butun son literali, "hello" esa satr literalidir.
E’lonlar ro‘yxati (Declaration List)
var dan foydalanishning yana bir qulay ko‘rinishi — o‘zgaruvchilarni e’lonlar ro‘yxati shaklida yozishdir. Agar bir nechta o‘zgaruvchi bir joyda e’lon qilinayotgan bo‘lsa, ularni var bloki ichida tartibli joylashtirish mumkin.
misol:
GO
var ( x int y = 20 z int = 30 d, e = 40, "hello" f, g string)
Bu usul ko‘pincha bir-biriga bog‘liq yoki bir joyda e’lon qilinishi kerak bo‘lgan o‘zgaruvchilarni tartibli ko‘rsatish uchun ishlatiladi. Natijada kod o‘qilishi osonroq bo‘ladi.
Yuqoridagi misolda:
x — int turida e’lon qilingan. Unga qiymat berilmagani uchun boshlang‘ich holatda 0 qiymatiga ega bo‘ladi. y — qiymat orqali turi aniqlangan o‘zgaruvchi. Unga 20 qiymati berilgan, shuning uchun Go uning turini int deb belgilaydi. z — int turida e’lon qilingan va unga 30 qiymati biriktirilgan. d va e — bir qatorda e’lon qilingan. d ga 40, e ga esa "hello" qiymati berilgan. f va g — string turida e’lon qilingan. Ularga qiymat berilmagani uchun boshlang‘ich holatda bo‘sh satr qiymatini oladi.
short variable declaration ":=" usuli
Go dasturlash tilida tilida o‘zgaruvchi e’lon qilishning qisqa shakli ham mavjud. Bu usul "short variable declaration" yoki "shorthand usuli" deb ataladi va := belgisi orqali yoziladi.
Funksiya ichida bo‘lganingizda, type inference ishlatiladigan var e’loni o‘rniga := dan foydalanish mumkin.
Masalan, quyidagi ikki yozuv bir xil ma’noni anglatadi:
var x = 10
yoki qisqa shaklda:
x := 10
Har ikkala holatda ham x nomli o‘zgaruvchi e’lon qilinadi va unga 10 qiymati beriladi. Go 10 qiymatiga qarab x o‘zgaruvchisining turini int deb aniqlaydi.
Bir nechta o‘zgaruvchini qisqa e’lon qilish
var kabi, := yordamida ham bir vaqtning o‘zida bir nechta o‘zgaruvchini e’lon qilish mumkin.
Masalan:
GO
var x, y = 10, "hello"
yoki qisqa shaklda:
GO
x, y := 10, "hello"
Bu yerda x ga 10, y ga esa "hello" qiymati beriladi. Go qiymatlarga qarab x ning turini int, y ning turini esa string deb aniqlaydi.
Mavjud o‘zgaruvchi bilan ishlatish
:= operatorining var bilan qilib bo‘lmaydigan qulay tomonlaridan biri shundaki, u bir vaqtning o‘zida yangi o‘zgaruvchi e’lon qilish va mavjud o‘zgaruvchiga yangi qiymat berish imkonini beradi.
Buning uchun := belgisining chap tomonida kamida bitta yangi o‘zgaruvchi bo‘lishi kerak:
GO
x := 10x, y := 30, "hello"
Bu misolda birinchi qatorda x nomli o‘zgaruvchi e’lon qilinadi.
Ikkinchi qatorda esa x avvaldan mavjud bo‘lgani uchun unga yangi qiymat beriladi. y esa yangi o‘zgaruvchi sifatida e’lon qilinadi.
Ya’ni bu yerda ikki xil ish bir vaqtda bajarilmoqda:
x — mavjud o‘zgaruvchi sifatida yangilanadi.
y — yangi o‘zgaruvchi sifatida e’lon qilinadi.
Ammo bu faqat chap tomonda kamida bitta yangi o‘zgaruvchi bo‘lgandagina ishlaydi. Agar chap tomondagi barcha o‘zgaruvchilar avvaldan mavjud bo‘lsa, := ishlatib bo‘lmaydi.
:= faqat funksiya ichida ishlatiladi
:= operatorining muhim cheklovi bor: u faqat funksiya ichida ishlatiladi.
Agar o‘zgaruvchi package darajasida, ya’ni funksiyadan tashqarida e’lon qilinayotgan bo‘lsa, var ishlatilishi kerak.
To‘g‘ri yozuv:
GO
var x = 10func main() { // code}
Noto'g'ri yozuv:
GO
x := 10 // xato func main() { // code }
Go Dasturlash Tili (Go Core)›Go Fundamentals›O'zgaruvchilar va O'zgarmaslar
O'zgarmaslar
Dasturlashda ba’zi qiymatlar dastur davomida o‘zgarmas bo‘lishi kerak. Masalan, hafta kunlari soni, matematik qiymatlar, maxsus kalit nomlari yoki dastur ichida doimiy ishlatiladigan matnlar.
Bunday qiymatlar constant deb ataladi.
Go dasturlash tilida constant e’lon qilish uchun const kalit so‘zi ishlatiladi.
Constant nima?
Constant — bu qiymati e’lon qilingandan keyin o‘zgarmaydigan doimiy qiymatdir.
Bu yerda message constant’i faqat main funksiyasi ichida ishlatiladi.
Agar constant faqat bitta funksiya ichida kerak bo‘lsa, uni aynan o‘sha funksiya ichida e’lon qilish yaxshi uslub hisoblanadi. Bu kodni tushunishni osonlashtiradi va qiymatning qayerda ishlatilishini aniq ko‘rsatadi.
Bir nechta constant e’lon qilish
bir nechta constan larni const block i ichida e'lon qilish mumkin:
Go Dasturlash Tili (Go Core)›Go Fundamentals›Type Conversion va User-Defined Types
Roadmap
Sahifa 01: Type Conversion nima? Sahifa 02: Explicit conversion Sahifa 03: Go'da implicit conversion yo'qligi Sahifa 04: Numeric conversion Sahifa 05: String conversion Sahifa 06: strconv paketi Sahifa 07: Type Alias Sahifa 08: Defined Types Sahifa 09: Underlying Type Sahifa 10: Conversion Best Practices Sahifa 11: Amaliy mashqlar
old
Sahifa 01: Type conversion nima? Sahifa 02: Implicit va explicit conversion Sahifa 03: Numeric conversion Sahifa 04: String conversion Sahifa 05: strconv paketi Sahifa 06: Defined types Sahifa 07: Type alias Sahifa 08: Type conversion qoidalari Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Control Flow — if/else
Roadmap
Sahifa 01: Control Flow nima? • Kod bajarilish oqimi • Sequential flow • Conditional flow • Loop flow • Go’da control flow qanday ko‘rinadi?
Sahifa 02: if statement • if nima? • bool expression • comparison operatorlar bilan ishlatish • oddiy if misollari
Sahifa 03: if-else • else nima? • ikki holatli qaror • true/false asosida kod ajratish
Sahifa 04: else if • bir nechta shart • shartlar tartibi • birinchi true bo‘lgan branch ishlashi
Sahifa 05: Short statement in if • if ichida variable yaratish • scope • Go’da ko‘p ishlatiladigan pattern
Sahifa 06: Guard Clause • nested if’dan qochish • early return • kodni o‘qilishi oson qilish
Sahifa 07: Common Mistakes • bool bo‘lmagan qiymatni if’da ishlatish • = va == farqi • ortiqcha nested if • shadowing ehtiyotkorligi
Sahifa 08: Amaliy mashqlar
again: Sahifa 01: Control Flow nima? Sahifa 02: if statement Sahifa 03: if-else Sahifa 04: else if Sahifa 05: Short statement in if Sahifa 06: Guard Clause Sahifa 07: Common Mistakes va Best Practices Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Control Flow — switch
Roadmap
Bob 14: Control Flow — switch
Sahifa 01: switch statement • switch nima? • switch qachon ishlatiladi? • if/else bilan farqi • oddiy switch misoli
Sahifa 02: case va default • case nima? • default nima? • case tartibi • default yozish kerakmi?
Sahifa 03: Multiple values in case • bitta case ichida bir nechta qiymat • OR-like behavior • kodni ixcham yozish
Sahifa 04: Expression switch • switch expression bilan ishlashi • string, int, bool qiymatlar bilan switch • qiymatlarni solishtirish
Sahifa 05: Switch without expression • expression’siz switch • if/else chain o‘rnida ishlatish • murakkab shartlarni chiroyli yozish
Sahifa 06: fallthrough • Go’da case avtomatik break bo‘lishi • fallthrough nima? • qachon ishlatmaslik kerak? • ehtiyotkorliklar
Sahifa 07: Type switch haqida kirish • type switch nima? • interface bilan bog‘liqligi • hozircha qisqa preview • batafsil Interfaces bobida
Sahifa 08: Common Mistakes va Best Practices • ortiqcha fallthrough ishlatish • if kerak joyda switch ishlatish • default’ni unutish • case’larni o‘qilishi oson tartibda yozish
Sahifa 09: Amaliy mashqlar
again Sahifa 01: switch statement Sahifa 02: case va default Sahifa 03: Multiple values in case Sahifa 04: Expression switch Sahifa 05: Switch without expression Sahifa 06: fallthrough Sahifa 07: Type switch haqida kirish Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Loops — for va range
Roadmap
Sahifa 01: Loop nima? Sahifa 02: Basic for loop Sahifa 03: for as while Sahifa 04: Infinite loop Sahifa 05: break va continue Sahifa 06: Nested loops Sahifa 07: Labels bilan break va continue Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Functions — Basics
Roadmap
Sahifa 01: Function nima? Sahifa 02: Function yaratish Sahifa 03: Parameters Sahifa 04: Return Values Sahifa 05: Multiple Return Values Sahifa 06: Named Return Values Sahifa 07: Function Scope Sahifa 08: Amaliy mashqlar
Sahifa 08: Common Mistakes va Best Practices
Go Dasturlash Tili (Go Core)›Go Fundamentals›defer, panic, recover
Roadmap
Sahifa 01: defer nima? Sahifa 02: defer execution order Sahifa 03: Multiple defer Sahifa 04: Resource cleanup with defer Sahifa 05: panic nima? Sahifa 06: recover nima? Sahifa 07: panic vs error Sahifa 08: Common Mistakes va Best Practices Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Pointerlar
Roadmap
Sahifa 01: Memory address nima? Sahifa 02: Pointer nima? Sahifa 03: & operator Sahifa 04: * operator Sahifa 05: Pointer orqali qiymatni o‘zgartirish Sahifa 06: nil pointer Sahifa 07: Pointer va Function Sahifa 08: new function Sahifa 09: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Array lar
Roadmap
Sahifa 01: Array nima? Sahifa 02: Array yaratish Sahifa 03: Array length Sahifa 04: Array indexing Sahifa 05: Array literals Sahifa 06: Array va for Sahifa 07: Array va range Sahifa 08: Array value sifatida uzatilishi Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Slice lar
Roadmap
Sahifa 01: Slice nima? Sahifa 02: Slice yaratish Sahifa 03: make bilan slice yaratish Sahifa 04: append Sahifa 05: len va cap Sahifa 06: Slice internals Sahifa 07: Slicing Sahifa 08: copy Sahifa 09: nil slice va empty slice Sahifa 10: Slice va range Sahifa 11: Common Mistakes va Best Practices Sahifa 12: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›String lar
Roadmap
Sahifa 01: String nima? Sahifa 02: String va UTF-8 Sahifa 03: len(), indexing va slicing Sahifa 04: for range va rune Sahifa 05: string ↔ []byte Sahifa 06: string ↔ []rune Sahifa 07: strings package Sahifa 08: strconv package Sahifa 09: unicode/utf8 package Sahifa 10: strings.Builder Sahifa 11: Common Mistakes va Best Practices Sahifa 12: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Map lar
Roadmap
Sahifa 01: Map nima? Sahifa 02: Key-value model Sahifa 03: Map yaratish Sahifa 04: make bilan map yaratish Sahifa 05: Qiymat olish va o'zgartirish Sahifa 06: Comma ok idiom Sahifa 07: delete Sahifa 08: map va range Sahifa 09: Map key va comparable rule Sahifa 10: nil map Sahifa 11: Common Mistakes va Best Practices Sahifa 12: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Struct lar
Roadmap
Sahifa 01: Struct nima? Sahifa 02: Fields Sahifa 03: Struct literal Sahifa 04: Struct pointer Sahifa 05: Nested struct Sahifa 06: Anonymous struct Sahifa 07: Embedded fields Sahifa 08: Struct tags Sahifa 09: Struct zero value Sahifa 10: Struct comparison Sahifa 11: Common Mistakes va Best Practices Sahifa 12: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Method lar
Roadmap
Sahifa 01: Method nima? Sahifa 02: Function va method farqi Sahifa 03: Receiver Sahifa 04: Value receiver Sahifa 05: Pointer receiver Sahifa 06: Method set — kirish Sahifa 07: Defined type bilan method Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Interfaces
Roadmap
Sahifa 01: Interface nima? Sahifa 02: Interface qanday ishlaydi? Sahifa 03: Implicit implementation Sahifa 04: Small interfaces Sahifa 05: Empty interface va any Sahifa 06: Type assertion Sahifa 07: Type switch Sahifa 08: Nil interface muammosi Sahifa 09: Real examples Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Fundamentals›Functions — Advanced
Go Dasturlash Tili (Go Core)›Paketlar, Modullar›Packages va Imports
Roadmap
Sahifa 01: Package nima? Sahifa 02: Bitta folder — bitta package Sahifa 03: package main va library package Sahifa 04: import nima? Sahifa 05: Import path qanday ishlaydi? Sahifa 06: Standard package, local package va third-party package farqi Sahifa 07: Import alias Sahifa 08: Blank import va dot import haqida ehtiyotkorlik Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Paketlar, Modullar›Modules Basics
Roadmap
Sahifa 01: Module nima? Sahifa 02: go mod init Sahifa 03: go.mod Sahifa 04: go.sum Sahifa 05: Dependency nima? Sahifa 06: go get Sahifa 07: go mod tidy Sahifa 08: Module path Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Paketlar, Modullar›O‘z Package’ingizni yarating
Roadmap
Sahifa 01: Library package nima? Sahifa 02: Package folder yaratish Sahifa 03: Package ichida function yozish Sahifa 04: Bir package ichida bir nechta .go file Sahifa 05: Local package’ni import qilish Sahifa 06: Package nomi va folder nomi Sahifa 07: Import cycle nima? Sahifa 08: Kichik calculator package yaratish Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›Standard Library Overview
Roadmap
Sahifa 01: Standard Library nima? Sahifa 02: fmt, log, slog Sahifa 03: strings, strconv, unicode Sahifa 04: os, io, bufio Sahifa 05: encoding packages Sahifa 06: time Sahifa 07: sort, slices, maps, cmp Sahifa 08: sync va context Sahifa 09: testing Sahifa 10: Standard Library’ni o'qish usuli
Go Dasturlash Tili (Go Core)›Standard Library›fmt va log
Roadmap
Sahifa 01: fmt package nima? Sahifa 02: Print, Println, Printf Sahifa 03: Formatting verbs: %v, %s, %d, %f, %T Sahifa 04: Sprintf bilan string yaratish Sahifa 05: log package Sahifa 06: log/slog haqida qisqa kirish Sahifa 07: Common Mistakes va Best Practices Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›Matn bilan ishlash
Roadmap
Sahifa 01: strings package Sahifa 02: Contains, HasPrefix, HasSuffix Sahifa 03: Split va Join Sahifa 04: Replace va Trim Sahifa 05: strconv package Sahifa 06: unicode package Sahifa 07: unicode/utf8 package Sahifa 08: regexp basics Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›Collections Helpers
Roadmap
Sahifa 01: sort package Sahifa 02: Custom sort Sahifa 03: slices package Sahifa 04: slices.Contains Sahifa 05: slices.Sort Sahifa 06: maps package Sahifa 07: maps.Clone Sahifa 08: cmp package Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›Time
Roadmap
Sahifa 01: time package Sahifa 02: time.Now() Sahifa 03: time.Time Sahifa 04: Time formatting Sahifa 05: Time parsing Sahifa 06: Duration Sahifa 07: Timer va Ticker Sahifa 08: Timezone — kirish Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›File System
Roadmap
Sahifa 01: os package Sahifa 02: File yaratish Sahifa 03: File ochish Sahifa 04: File o'qish Sahifa 05: File yozish Sahifa 06: os.ReadFile va os.WriteFile Sahifa 07: path/filepath Sahifa 08: Temporary files Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›io va bufio
Roadmap
Sahifa 01: io.Reader Sahifa 02: io.Writer Sahifa 03: io.Copy Sahifa 04: io.EOF Sahifa 05: bytes.Buffer Sahifa 06: strings.Reader Sahifa 07: bufio.Reader va Writer Sahifa 08: bufio.Scanner Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›JSON va Encoding
Roadmap
Sahifa 01: JSON nima? Sahifa 02: encoding/json Sahifa 03: Marshal Sahifa 04: Unmarshal Sahifa 05: Struct tags Sahifa 06: Nested JSON Sahifa 07: Decoder va Encoder Sahifa 08: map[string]any Sahifa 09: csv va xml — kirish Sahifa 10: Common Mistakes va Best Practices Sahifa 11: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›CLI Basics: log, flag, env
RM
Sahifa 01: log package Sahifa 02: log/slog — kirish Sahifa 03: os.Args Sahifa 04: flag package Sahifa 05: Command-line arguments Sahifa 06: Environment variables Sahifa 07: os.Getenv Sahifa 08: Amaliy CLI misol Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Standard Library›Math, Hash va Random
RM
Sahifa 01: math package Sahifa 02: math.Round, Floor, Ceil Sahifa 03: math/rand Sahifa 04: crypto/rand farqi Sahifa 05: hash tushunchasi Sahifa 06: sha256 Sahifa 07: encoding/base64 Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›Concurrency Basics
RM
Sahifa 01: Concurrency nima? Sahifa 02: Parallelism nima? Sahifa 03: Concurrency va parallelism farqi Sahifa 04: Blocking tushunchasi Sahifa 05: Race condition — kirish Sahifa 06: Go scheduler — sodda tushuncha Sahifa 07: Common Mistakes va Best Practices Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›Goroutines
RM
Sahifa 01: Goroutine nima? Sahifa 02: go keyword Sahifa 03: Main goroutine Sahifa 04: Goroutine lifecycle Sahifa 05: Goroutine qachon tugaydi? Sahifa 06: time.Sleep bilan noto'g'ri kutish Sahifa 07: Goroutine leak — kirish Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›Channels
RM
Sahifa 01: Channel nima? Sahifa 02: Channel yaratish Sahifa 03: Send va receive Sahifa 04: Unbuffered channel Sahifa 05: Buffered channel Sahifa 06: close Sahifa 07: range over channel Sahifa 08: Directional channels Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›select
RM
Sahifa 01: select nima? Sahifa 02: Multiple channels Sahifa 03: default case Sahifa 04: Timeout Sahifa 05: done channel Sahifa 06: Cancellation — kirish Sahifa 07: Common Mistakes va Best Practices Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›sync package
RM
Sahifa 01: sync package Sahifa 02: WaitGroup Sahifa 03: Mutex Sahifa 04: RWMutex Sahifa 05: Once Sahifa 06: Cond — kirish Sahifa 07: Pool — kirish Sahifa 08: sync.Map — kirish Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›Atomic Operations va Data Race
RM
Sahifa 01: Race condition Sahifa 02: Data race Sahifa 03: go test -race — kirish Sahifa 04: sync/atomic Sahifa 05: Atomic counter Sahifa 06: Mutex va atomic farqi Sahifa 07: Atomic qachon kerak? Sahifa 08: Common Mistakes va Best Practices Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›context package
RM
Sahifa 01: context nima? Sahifa 02: context.Background Sahifa 03: context.TODO Sahifa 04: WithCancel Sahifa 05: WithTimeout Sahifa 06: WithDeadline Sahifa 07: context value Sahifa 08: Contextdan noto'g'ri foydalanish Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Concurrency›Concurrency Patterns
RM
Sahifa 01: Worker pool Sahifa 02: Pipeline Sahifa 03: Fan-out Sahifa 04: Fan-in Sahifa 05: Semaphore pattern Sahifa 06: Rate limit — kirish Sahifa 07: Graceful shutdown — kirish Sahifa 08: Goroutine leak oldini olish Sahifa 09: Common Mistakes va Best Practices Sahifa 10: Amaliy loyiha
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Go Command Basics
RM
Sahifa 01: go command Sahifa 02: go help Sahifa 03: go run Sahifa 04: go build Sahifa 05: go install Sahifa 06: go clean Sahifa 07: go version Sahifa 08: go list — kirish
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Build Configuration
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Formatting va Static Checks
RM
Sahifa 01: gofmt Sahifa 02: go fmt Sahifa 03: go vet Sahifa 04: go fix — kirish Sahifa 05: Static analysis Sahifa 06: Linter nima? Sahifa 07: Kod sifatini tekshirish odati
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Dependency Management
RM
Sahifa 01: go.mod chuqurroq Sahifa 02: go.sum chuqurroq Sahifa 03: go get Sahifa 04: go mod tidy Sahifa 05: go mod download Sahifa 06: go mod graph Sahifa 07: replace Sahifa 08: exclude Sahifa 09: vendor Sahifa 10: Private modules — kirish
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Go Workspace
RM
Sahifa 01: Workspace nima? Sahifa 02: go work init Sahifa 03: go work use Sahifa 04: go.work Sahifa 05: Multiple modules Sahifa 06: Monorepo — kirish Sahifa 07: Workspace qachon kerak emas? Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Documentation
RM
Sahifa 01: Go documentation culture Sahifa 02: Documentation comments Sahifa 03: Exported names comments Sahifa 04: go doc Sahifa 05: pkg.go.dev Sahifa 06: Example orqali documentation Sahifa 07: Package documentation Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Environment va Cache
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Code Generation va embed
RM
Sahifa 01: go generate Sahifa 02: //go:generate Sahifa 03: Code generation qachon kerak? Sahifa 04: embed package Sahifa 05: //go:embed Sahifa 06: Faylni binary ichiga qo'shish Sahifa 07: embed bilan CLI misol Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go Toolchain & Project management›Go Project Structure
RM
Sahifa 01: Oddiy Go project structure Sahifa 02: Single package project Sahifa 03: main package va library package Sahifa 04: cmd folder Sahifa 05: internal folder Sahifa 06: testdata folder Sahifa 07: examples folder Sahifa 08: Overengineeringdan qochish Sahifa 09: Amaliy loyiha strukturasi
Go Dasturlash Tili (Go Core)›Testing›Testing Basics
RM
p
Go Dasturlash Tili (Go Core)›Testing›Table-driven Tests
RM
Sahifa 01: Table-driven test nima? Sahifa 02: Test case struct Sahifa 03: for loop bilan test Sahifa 04: t.Run Sahifa 05: Subtests Sahifa 06: Parallel subtests — kirish Sahifa 07: Test naming Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Test Helpers va testdata
RM
Sahifa 01: Helper function Sahifa 02: t.Helper() Sahifa 03: Setup va teardown Sahifa 04: t.TempDir() Sahifa 05: testdata folder Sahifa 06: Golden file testing Sahifa 07: Natijalarni taqqoslash Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Benchmarks
RM
Sahifa 01: Benchmark nima? Sahifa 02: BenchmarkXxx function Sahifa 03: b.N Sahifa 04: go test -bench Sahifa 05: b.ReportAllocs Sahifa 06: Allocation o'lchash Sahifa 07: Microbenchmark xatolari Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Coverage
RM
Sahifa 01: Coverage nima? Sahifa 02: go test -cover Sahifa 03: Coverage profile Sahifa 04: HTML coverage Sahifa 05: 100% coverage har doim maqsad emas Sahifa 06: Muhim test yozish Sahifa 07: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Examples va Fuzzing
RM
Sahifa 01: Example test Sahifa 02: ExampleXxx function Sahifa 03: Output comment Sahifa 04: Documentation bilan bog'liq testlar Sahifa 05: Fuzz testing Sahifa 06: FuzzXxx function Sahifa 07: Fuzz test qachon foydali? Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Concurrent Code Testing
RM
Sahifa 01: Concurrent kodni testlash qiyinligi Sahifa 02: go test -race Sahifa 03: Timeout bilan testlash Sahifa 04: Flaky test Sahifa 05: Channel bilan test Sahifa 06: Context bilan test Sahifa 07: Race condition topish Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Testing›Mock, Fake va Test Boundaries
RM
Sahifa 01: Mock nima? Sahifa 02: Fake nima? Sahifa 03: Stub nima? Sahifa 04: Interface orqali testlash Sahifa 05: Test uchun kichik interface Sahifa 06: Unit test va integration test farqi Sahifa 07: Tashqi kutubxonasiz test yozish Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Go Idioms nima?
RM
Sahifa 01: Idiom nima? Sahifa 02: Gocha kod yozish Sahifa 03: Simplicity Sahifa 04: Explicit code Sahifa 05: Kamroq abstraction Sahifa 06: Go kodini o'qish madaniyati
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Naming va Code Style
RM
Sahifa 01: Go naming philosophy Sahifa 02: Qisqa nomlar Sahifa 03: Uzoq nom qachon kerak? Sahifa 04: Package names Sahifa 05: Interface names Sahifa 06: Exported names Sahifa 07: Comment style Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Early Return va Guard Clause
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Error Handling Idioms
RM
Sahifa 01: Errorni yashirmaslik Sahifa 02: Errorni darhol tekshirish Sahifa 03: Error wrapping culture Sahifa 04: Sentinel error qachon kerak? Sahifa 05: Custom error qachon kerak? Sahifa 06: panicdan qochish Sahifa 07: Error message style Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Interface Idioms
RM
Sahifa 01: Small interfaces Sahifa 02: Interface'ni consumer tomonda yozish Sahifa 03: Accept interfaces, return structs Sahifa 04: Empty interface'dan ehtiyot bo'lish Sahifa 05: any qachon kerak? Sahifa 06: Interface ortiqcha ishlatilganda Sahifa 07: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Struct va Composition Idioms
RM
Sahifa 01: Go'da inheritance yo'q Sahifa 02: Composition Sahifa 03: Embedding Sahifa 04: Zero value foydali bo'lishi Sahifa 05: Constructor function qachon kerak? Sahifa 06: Config struct Sahifa 07: Functional options — kirish Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Concurrency Idioms
RM
Sahifa 01: Channel ownership Sahifa 02: Channelni kim yopadi? Sahifa 03: Close signal sifatida Sahifa 04: Context bilan cancellation Sahifa 05: Goroutine leakdan qochish Sahifa 06: Shared memory vs message passing Sahifa 07: Worker pool idiomi Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Package Design Idioms
RM
Sahifa 01: Kichik package yozish Sahifa 02: Public API'ni toza saqlash Sahifa 03: internal package ishlatish Sahifa 04: Circular dependencydan qochish Sahifa 05: Package name va API name takrorlanmasligi Sahifa 06: Minimal dependency Sahifa 07: Amaliy refactoring
Go Dasturlash Tili (Go Core)›Go idiomlari va kod yozish uslubi›Readable Code va Refactoring
RM
Sahifa 01: Readable code nima? Sahifa 02: Clever codedan qochish Sahifa 03: Kichik functions Sahifa 04: Takroriy kodni to'g'ri ajratish Sahifa 05: Refactoring qachon kerak? Sahifa 06: Code review checklist Sahifa 07: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Stack va Heap
RM
Sahifa 01: Stack Sahifa 02: Heap Sahifa 03: Local variables qayerda yashaydi? Sahifa 04: Pointer va allocation Sahifa 05: Stack growth Sahifa 06: Heap allocation narxi Sahifa 07: Amaliy misollar
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Escape Analysis
RM
Sahifa 01: Escape analysis Sahifa 02: Qiymat qachon heapga chiqadi? Sahifa 03: Pointer qaytarish misoli Sahifa 04: Interface va escape Sahifa 05: go build -gcflags=-m Sahifa 06: Natijalarni o'qish Sahifa 07: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Garbage Collector
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Go Memory Model
RM
Sahifa 01: Memory model nima? Sahifa 02: Happens-before Sahifa 03: Channel va memory synchronization Sahifa 04: Mutex va memory synchronization Sahifa 05: Atomic va memory ordering Sahifa 06: Data race nimaga xavfli? Sahifa 07: Amaliy misollar
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Scheduler
RM
Sahifa 01: Scheduler nima? Sahifa 02: M, P, G model — kirish Sahifa 03: Goroutine scheduling Sahifa 04: Blocking syscall Sahifa 05: Network polling — kirish Sahifa 06: Preemption — kirish Sahifa 07: GOMAXPROCS Sahifa 08: Amaliy tushuntirish
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Profiling
RM
Sahifa 01: Profiling nima? Sahifa 02: Benchmark va profiling farqi Sahifa 03: pprof — kirish Sahifa 04: CPU profiling Sahifa 05: Memory profiling Sahifa 06: Goroutine profiling Sahifa 07: Blocking profiling Sahifa 08: Natijalarni o'qish Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Performance Optimization
RM
Sahifa 01: Avval o'lchash, keyin optimize qilish Sahifa 02: Allocation kamaytirish Sahifa 03: Slice capacity oldindan berish Sahifa 04: strings.Builder Sahifa 05: bytes.Buffer Sahifa 06: sync.Pool ehtiyotkorliklari Sahifa 07: Premature optimizationdan qochish Sahifa 08: Amaliy refactoring
Go Dasturlash Tili (Go Core)›Ichki mexanizmlar va unumdorlik›Diagnostics
RM
Sahifa 01: runtime package Sahifa 02: runtime/debug Sahifa 03: Stack trace o'qish Sahifa 04: Panic stack trace Sahifa 05: runtime/metrics — kirish Sahifa 06: trace — kirish Sahifa 07: Muammo topish tartibi
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›Reflection
RM
Sahifa 01: Reflection nima? Sahifa 02: reflect paketi Sahifa 03: reflect.Type Sahifa 04: reflect.Value Sahifa 05: Struct fieldlarini o'qish Sahifa 06: Methodlarni ko'rish Sahifa 07: Struct taglar va reflection Sahifa 08: Reflection qachon kerak? Sahifa 09: Reflection qachon kerak emas? Sahifa 10: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›unsafe paketi
RM
Sahifa 01: unsafe nima? Sahifa 02: unsafe.Pointer Sahifa 03: uintptr Sahifa 04: unsafe.Sizeof Sahifa 05: unsafe.Alignof Sahifa 06: unsafe.Offsetof Sahifa 07: unsafe xavflari Sahifa 08: unsafe qachon kerak bo'lishi mumkin? Sahifa 09: unsafe ishlatmaslik kerak bo'lgan holatlar
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›CGo
RM
Sahifa 01: CGo nima? Sahifa 02: Go va C bog'lanishi Sahifa 03: Oddiy C funksiyasini chaqirish Sahifa 04: C type va Go type Sahifa 05: Memory ownership masalasi Sahifa 06: CGo performance narxi Sahifa 07: Portability muammolari Sahifa 08: CGo qachon kerak? Sahifa 09: CGo qachon kerak emas?
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›Build constraints va direktivalar
RM
Sahifa 01: Build constraint nima? Sahifa 02: //go:build Sahifa 03: OS bo'yicha fayl ajratish Sahifa 04: Architecture bo'yicha fayl ajratish Sahifa 05: //go:generate qayta ko'rish Sahifa 06: //go:embed qayta ko'rish Sahifa 07: Compiler directive haqida ehtiyotkorlik Sahifa 08: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›Ilg‘or Go patternlar
RM
Sahifa 01: Functional options Sahifa 02: Builderga o'xshash uslub Sahifa 03: Pipeline pattern Sahifa 04: Retry pattern Sahifa 05: Cancellation pattern Sahifa 06: Iterator uslubi Sahifa 07: Plugin-like design haqida kirish Sahifa 08: Patternlarni ortiqcha ishlatmaslik Sahifa 09: Amaliy mashqlar
Go Dasturlash Tili (Go Core)›Ilg‘or imkoniyatlar›Go versiyalari va yangiliklar
RM
Sahifa 01: Go versiyalari qanday chiqadi? Sahifa 02: Backward compatibility Sahifa 03: Eski kod va yangi Go Sahifa 04: Release notes o'qish Sahifa 05: Yangi featurelarni baholash Sahifa 06: Loyihani yangi versiyaga ko'tarish Sahifa 07: Go kodini uzoq muddat saqlash
CGO AI
Shu bo'lim haqida so'rang
Salom! Men CGO AIman. Ushbu bo'lim bo'yicha — tushunchalar, misollar yoki uchragan muammolar haqida menga istalgan savolni bering.