Go Başlangıç Kılavuzu

Bu makale, Go programlama diline nasıl başlayacağınızı gösterecektir. Sözdizimi açısından konuşursak, öğrenmesi zor değildir, muhtemelen birkaç gün içinde başlayabilirsiniz. Ancak geleneklere göre, resmi olarak başlamadan önce, arka planını ve kökenini anlamamız gerekiyor.
Arka Plan
Go dili üç büyük isim tarafından birlikte yaratıldı:
- Ken Thompson, Turing Ödülü sahibi, Unix sistemi kurucusu, B dili kurucusu, C dili kurucusu
- Rob Pike, Plan9 işletim sisteminin yazarlarından biri, UTF-8'in mucitlerinden biri, Go dili tasarımının lideri
- Robert Griesemer, JS V8 motoru geliştiricisi, üç kişi arasında en genç olanı
Bir de Rob Pike'ın eşi Renee French var, Go dilinin logosunu tasarladı, mavi bir yer sıçanı.

Bir gün, üç mühendis uzun bir C++ projesi derleme bekleme sürecinde çok sıkıldılar. Tam bu sırada, Rob Pike'ın zihninde aniden yeni bir fikir belirdi: Basit, küçük, hızlı derlenen ve aynı zamanda iyi performansa sahip bir programlama dili tasarlamak istiyordu, böylece her derlemede uzun bekleme süreleriyle karşılaşmak zorunda kalmazlardı. Kısa bir beyin fırtınasından sonra, üçü 20 Eylül 2007'de kısa bir toplantı düzenledi ve dilin ilk prototipini tartışıp tasarlamaya başladılar. Tam bu andan itibaren, Go dili resmi olarak doğdu. Daha sonra, bu küçük ekip giderek daha fazla aynı düşüncedeki geliştiriciyi kendine çekti ve sonunda 10 Kasım 2009'da, Google Go dilini BSD-3-Clause lisansı altında açık kaynak olarak yayınladı, ilk ön sürümü çıkardı ve resmi bir geliştirme ekibi kurdu.
İpucu
Başka yerlerde bazı insanların ona Golang dediğini görebilirsiniz, hatta bu sitenin Github deposunun adı da Golang-Doc, ancak resmi adı her zaman Go olmuştur. Erken dönemlerde go alan adı başkaları tarafından kaydedildiği için, resmi web sitesi alan adı golang.org olarak benimsendi, bu da sonraki yeni gelenlerin yanlışlıkla Golang olarak adlandırılmasına neden oldu.

Daha sonra, Go ekibi üç yıllık tasarım ve geliştirmeden sonra, Mart 2012'de ilk kararlı sürüm Go 1.0'ı yayınladı (bu sırada Go'nun araç zinciri ve çalışma zamanı hala C dili ile yazılmıştı, Go 1.5'e kadar kendi kendini derleyebilme tamamlanmadı), o zamandan beri her yıl iki küçük sürüm güncellemesi yayınlandı ve bugüne kadar işletildi ve sürdürüldü.
Üç kurucu aslında çok önce emekli oldu, çoğu zaman ekip lideri Russ Cox idi, Go dili henüz yayınlanmadan önce geliştirme çalışmalarına katılmıştı ve o zamandan beri 12 yıl boyunca Go ekibini yönetti, Ağustos 2024'te görevinden ayrılana kadar, ardından Austin Clements devraldı ve sonraki geliştirme çalışmalarına liderlik etti.
Go dilinin tarihçesi hakkında daha fazla bilgi edinmek isterseniz, Go History adresini ziyaret edin.
Özellikler
- Basit sözdizimi Go dili, özgürlük ve esneklik arasında bir denge kurmuştur, bu da daha iyi sürdürülebilirlik ve yumuşak bir öğrenme eğrisi sağlamıştır.
- Dağıtım dostu Go'nun statik derlenmiş ikili dosyaları ek çalışma zamanı ortamına bağlı değildir, derleme hızı da çok hızlıdır.
- Çapraz derleme Go, derleme sırasında sadece iki parametre ayarlayarak diğer platformlarda çalışabilen programlar derleyebilir
- Doğal eşzamanlılık Go dilinin eşzamanlılık desteği doğaldır, sadece bir anahtar kelime ile bir asenkron coroutine başlatabilirsiniz.
- Çöp toplama Go'nun mükemmel GC performansı vardır, çoğu durumda GC gecikmesi 1 milisaniyeyi aşmaz.
- Zengin standart kütüphane Dize işlemeden kaynak AST ayrıştırmaya kadar, güçlü ve zengin standart kütüphane Go dili için sağlam bir temeldir.
- Eksiksiz araç zinciri Go'nun derleme, test, bağımlılık yönetimi, performans analizi gibi birçok yönü kapsayan eksiksiz bir geliştirme araç zinciri vardır.
Go dili, kalıtımı terk etti, OOP'yi zayıflattı, sınıf, meta programlama, generic, Lamda ifadeleri gibi bu özelliklere sahip değil, iyi performansa ve düşük öğrenme zorluğuna sahip, bulut hizmeti geliştirme, uygulama sunucu geliştirme ve ağ programlama için uygundur. Kendisiyle birlikte GC getirir, geliştiricilerin belleği manuel olarak yönetmesine gerek yoktur, statik derleme ve çapraz derleme bu iki nokta operasyon personeli için de çok dosttur.
Go dilinin dezavantajları da çoktur, örneğin eleştirilen hata işleme, eksik generic, standart kütüphane çok zengin olmasına rağmen yerleşik veri yapıları çok az, interface{} türü çok yaygın, enum türü yok, bunların dışında, Go geliştirme ekibi çok inatçı, topluluk görüşlerini dinlemekte iyi değil vb. (Buna karşılık, Rust hata işleme, generic, bağımlılık yönetimi, enum, arayüz vb. alanlarda çok daha iyi)
Genel olarak, bir dile diyalektik olarak bakmamız gerekiyor, mühendislik bir dil olarak, Go büyük ölçüde bir ekibin alt sınırını artırabilir, geliştirme personeli seviyesi ne kadar düşük olursa olsun destekleyebilir, nadiren bir fare tencereyi bozar durumu ortaya çıkar, aynı zamanda basit sözdizimi ve düşük öğrenme zorluğu sayesinde, bir projeye çok hızlı bir şekilde başlanabilir. Go'nun piyasaya sürülmesinden on yıldan biraz fazla zaman geçmesine rağmen, oldukça fazla şirket Go'yu birincil dil olarak seçti, bu da Go'nun yavaş yavaş popüler hale geldiğini gösterebilir.
Bu arada, Go tamamen açık kaynaklı bir dildir, topluluk ve Google tarafından Go dilinin gelişimi birlikte sürdürülür, resmi adres Google deposundadır, Github'da aynı ayna deposu vardır, eğer isterseniz dil tasarımına da katılabilirsiniz.
Resmi web sitesi: The Go Programming Language
Google açık kaynak deposu: google/go: Google Open Source
Github deposu: golang/go: The Go programming language
TIP
Yazar daha önce Go'ya PR gönderdi, Go'ya nasıl kod katkısında bulunulacağını öğrenmek isterseniz, yazdığım bu makaleye bakabilirsiniz: Go'ya Nasıl Kod Katkısında Bulunulur.
Birçoğunun Rust hakkında az çok duyduğunu düşünüyorum, yüksek performanslı genel amaçlı bir programlama dilidir, doğuş zamanı Go'dan bir yıl önceydi, Go1 resmi olarak 2012'de yayınlandı, Rust resmi sürümü 2015'te yayınlandı, her ikisi de daha modern dillerdir, bu iki dil yazarı çok seviyor, geliştirdikleri alanlar farklı, Go'nun çalışma verimliliği ve ifade yeteneğinden memnun değilseniz, Rust'ı deneyebilirsiniz, ancak öğrenme zorluğu Go kadar basit değildir.
Kurulum
Go dili indirme: Downloads - The Go Programming Language

Stable Version, şu anda sürdürülen iki kararlı sürümü ifade eder, Archived Version ise artık sürdürülmeyen tarihi sürümleri ifade eder, bakım kuralları ve tarihi sürümler hakkında daha fazla bilgi için sürüm notlarına bakın.
Windows
Windows platformu için, installer ve archive olmak üzere iki tür seçenek mevcuttur, ilki kurulum paketidir, sadece tıklamanız gerekir, ikincisini öneririm, go dilinin dizin yapısını daha iyi tanımanızı sağlar, gelecekte sorunlar ortaya çıktığında ne yapacağınızı bilirsiniz. Zip dosyasını indirmeyi seçin, sıkıştırılmış dosya go dilinin kaynak kodunu, araç zincirini ve bazı belgeleri içerir, belirtilen yola çıkarın, ardından iki sistem ortam değişkeni yapılandırmanız gerekir.
- GOROOT - Go dilinin kurulum yolu
- GOPATH - Go dili bağımlılık depolama yolu
Ayarlandıktan sonra, sistem ortam değişkeni PATH'e iki yeni öğe ekleyin
%GOROOT%\bin: Bu go ikili program adresidir%GOPATH%\bin: Bu gelecekte üçüncü taraf bağımlılıklarının ikili dosyalarının depolanacağı adrestir
powershell'de go version komutunu çalıştırın, son olarak sürümü normal şekilde gösterebilirse kurulum doğru demektir.
PS C:\user\username> go version
go version go1.21.3 windows/amd64Güncelleme için yeni zip dosyasını indirip orijinal kurulum dizininin üzerine yazmanız yeterlidir.
Linux
Ubuntu örneğiyle, istediğiniz sürümün bağlantısını kopyalayın, yerel olarak indirin
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gzBelirtilen dizine çıkarın
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gz$HOME/.bashrc dosyasında ortam değişkenlerini ayarlayın
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/binTamamlandıktan sonra kurulu sürümü kontrol edin, doğru kurulduğunu onaylayın
$ go version
go version go1.21.1 linux/amd64Güncelleme için yeni tar.gz dosyasını indirip orijinal kurulum dizininin üzerine yazmanız yeterlidir.
Kurulum Yönetimi
Yukarıdaki kurulum yöntemi temel kullanım için yeterlidir, kişisel olarak Go dili ve türev dosyalarını depolamak için aşağıdaki dizin yapısını öneririm
go/
|
|--root/
| |
| |--go1.21.3/
| |
| |--go1.20.10/
|
|--mod/
| |
| |--bin/
| |
| |--libs/
|
|--cache/
|
|--temp/
|
|--envAçıklaması aşağıdaki gibidir
go/rootdizini çeşitli Go dili kaynak dosyalarının sürümlerini depolamak için kullanılırgo/modkarşılığıGOPATHgo/mod/libskarşılığıGOMODCACHE, yani indirilen üçüncü taraf bağımlılıklarının depolandığı adresgo/mod/binkarşılığıGOBIN, üçüncü taraf bağımlılık ikili dosyalarının depolandığı adresgo/cache, karşılığıGOCACHE, önbellek dosyalarını depolargo/temp, karşılığıGOTMPDIR, geçici dosyaları depolargo/env, karşılığıGOENV, global ortam değişkeni yapılandırma dosyası
Bu yöntem güncelleme sırasında orijinal kurulum dizininin üzerine yazmayı gerektirmez, sadece go/root dizinine yerleştirmeniz ve ardından GOROOT sistem ortam değişkenini bu dizindeki belirtilen sürümün klasörüne değiştirmeniz yeterlidir. Varsayılan olarak env dosyası GOROOT/env yolunu okur, GOENV sistem değişkeni ayarlanarak GOROOT'tan ayrılır, Go ortam değişkeni yapılandırmasının sürüm değişikliği nedeniyle değişmesinden kaçınılır, aşağıda env dosyasının ilk ayarları verilmiştir.
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/tempBu sadece yazarın tercih ettiği bir dizin stili, ortam değişkenleri hakkında daha fazla bilgi için komut-ortam değişkenleri adresini ziyaret edin, tamamen kişisel tercihinize göre özelleştirebilirsiniz.
Çoklu Sürüm Yönetimi
govm adında bir çoklu sürüm yönetim aracı yazdım, yukarıdaki dizin yapısı ile kullanıldığında en iyi sonucu verir. Birden fazla Go sürümünü yönetebilir, istediğiniz zaman sürüm değiştirebilir, diğer Go sürümlerini arayabilir ve indirebilir ve bunları yerel olarak kurabilirsiniz.
$ govm search 1.22 -n 10
go1.22.6 76 MB
go1.22.5 76 MB
go1.22.4 76 MB
go1.22.3 76 MB
go1.22.2 76 MB
go1.22.1 76 MB
go1.22.0 76 MB
$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed
$ govm use 1.22.4
Use go1.22.4 now
# Kabuğu yeniden başlat
$ go version
go version go1.22.4 windows/amd64Go ile komut satırı araçlarının nasıl yazılacağını öğrenmek isterseniz, govm'i bir proje referansı olarak kullanabilirsiniz, o da Go ile yazılmıştır.
Düzenleyici
Ana akım Go dili IDE'leri şu anda kişisel olarak sadece aşağıdaki ikisini öneririm
- goland: jetbrain ürünü, güçlü, kapsamlı destek, ancak ücretli, IDEA topluluk sürümünü eklentilerle birlikte düşünebilirsiniz
- vscode: Ücretsiz, evrensel düzenleyici, eklentilerle her dili yazabilir
Kendi kullanım alışkanlıklarınıza daha uygun başka düzenleyiciler de kullanabilirsiniz, hangi düzenleyiciyi kullandığınız önemli değil, sadece kısa alıştırma kodları yazıyorsanız, resmi olarak sağlanan goplay deneyebilirsiniz, Go kodunu çevrimiçi çalıştırabilirsiniz.
TIP
JetBrains Toolbox kullanıyorsanız, yazdığım komut satırı aracını AutoToolBox deneyebilirsiniz, Toolbox için windows sağ tık menüsü oluşturabilir, önizleme resmi aşağıdaki gibidir.

Tavsiye
Go dilinin genel zorluğu yüksek değil, başka dil temeliniz varsa öğrenmesi çok basit olacaktır, öğrenme sürecinde anlaşılmaz zorluklarla karşılaştığınızda atlayabilirsiniz, herhangi bir dili öğrenmek önce dilin genel sözdizimi ve yapısını genel olarak anlamak, sonra bazı özellikleri ve detayları derinlemesine araştırmaktır, belgedeki felsefe de budur, başlangıç öğrenmesi için uygundur. Yazar sadece sıradan bir öğrenci, ihmal ve hatalar kaçınılmazdır, herhangi bir hata bulursanız Github'da PR gönderebilirsiniz, belgeyi beğendiyseniz Github'da bir Star verebilirsiniz.
Güçlü OOP dili geliştiricisiyseniz, örneğin Java, C# vb., lütfen OOP düşüncesiyle önyargılı olarak başlamayın, aksi takdirde go'nun birçok tasarımını anlamakta zorlanacaksınız, kod yazarken de çok rahatsız olacaksınız, yazar başlangıçta böyleydi.
Genel Bakış
Aşağıda sitenin içeriği hakkında basit bir tanıtım verilmiştir, böylece ihtiyaca göre okuyabilirsiniz, bazı sayfaların boş olması henüz güncellenmediğini gösterir.
- Dil Girişi: Öncelikle Go dili ile ilgili içeriği anlatır, daha çok teorik.
- Sözdizimi Temelleri: Öncelikle
if,forgibi çok temel sözdizimi kurallarını anlatır. - Sözdizimi İleri Düzey: Modül, test, coroutine gibi Go'ya özgü şeyleri anlatır.
- Standart Kütüphane: Go'nun kendi standart kütüphanesinin kısa bir tanıtımı, standart kütüphane içeriği çok büyük olduğu için güncellemeler düzensiz.
- Uygulama Prensipleri: Öncelikle Go dilinin bazı iç tasarım prensiplerini anlatır, örneğin coroutine zamanlaması, bellek yönetimi, çöp toplama vb.
- Sözdizimi Temelleri: Öncelikle
- Topluluk Ekosistemi: Öncelikle Go çevresindeki ekosistemi anlatır, daha çok uygulama.
- Veritabanı: Go ile ana akım veritabanlarını kullanma.
- Mikroservis: Go ile ilgili bazı mikroservis araçlarını tanıtma.
- Üçüncü Taraf Kütüphaneler: Go ile yazılmış bazı üçüncü taraf kütüphaneleri tanıtma, düzensiz güncellemeler, veya doğrudan bağımlılık navigasyonunda görüntüleyebilirsiniz.
Başlangıç öğrenmesi için Başlamaya Hazır Ol adresine gidin
