Skip to content

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.

Bu resmi web sitesinin ilk hali

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.

powershell
PS C:\user\username> go version
go version go1.21.3 windows/amd64

Gü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

sh
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz

Belirtilen dizine çıkarın

sh
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gz

$HOME/.bashrc dosyasında ortam değişkenlerini ayarlayın

sh
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Tamamlandıktan sonra kurulu sürümü kontrol edin, doğru kurulduğunu onaylayın

sh
$ go version
go version go1.21.1 linux/amd64

Gü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/
|
|--env

Açıklaması aşağıdaki gibidir

  • go/root dizini çeşitli Go dili kaynak dosyalarının sürümlerini depolamak için kullanılır
  • go/mod karşılığı GOPATH
  • go/mod/libs karşılığı GOMODCACHE, yani indirilen üçüncü taraf bağımlılıklarının depolandığı adres
  • go/mod/bin karşılığı GOBIN, üçüncü taraf bağımlılık ikili dosyalarının depolandığı adres
  • go/cache, karşılığı GOCACHE, önbellek dosyalarını depolar
  • go/temp, karşılığı GOTMPDIR, geçici dosyaları depolar
  • go/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.

ini
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/temp

Bu 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.

bash
$ 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/amd64

Go 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

  1. goland: jetbrain ürünü, güçlü, kapsamlı destek, ancak ücretli, IDEA topluluk sürümünü eklentilerle birlikte düşünebilirsiniz
  2. 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, for gibi ç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.
  • Topluluk Ekosistemi: Öncelikle Go çevresindeki ekosistemi anlatır, daha çok uygulama.

Başlangıç öğrenmesi için Başlamaya Hazır Ol adresine gidin

Golang by www.golangdev.cn edit