Go
Kısaca
Go, sadelik ve hızlı derleme için tasarlanmış; çöp toplama ve goroutine'lerle yerleşik eşzamanlılık sunan, derlenen ve statik tipli bir dildir.
Go programlama dili nedir?
Go, Google'da Robert Griesemer, Rob Pike ve Ken Thompson tarafından geliştirilen ve 2009'da yayımlanan açık kaynaklı bir programlama dilidir. İlk web sitesi adresinden dolayı sık sık "Golang" diye anılır; bu ad aramada bulmayı da kolaylaştırır. Go, büyük kod tabanlarını okunur ve bakımı kolay tutmak için tasarlandı: az sayıda anahtar sözcük, tek bir standart biçimlendirme aracı (gofmt) ve tek başına çalışabilen bir çalıştırılabilir dosyaya hızlı derleme sunar.
Go statik tiplidir ve count := 5 gibi kısa bildirimler derleyicinin tipleri çıkarmasına izin verir. Bir tip, bir arayüzü (interface) ayrıca bildirmeden yalnızca doğru metotlara sahip olarak karşılar; jenerikler Go 1.18'den beri mevcuttur. Bellek çöp toplayıcıyla yönetilir, ancak Go'da işaretçiler (işaretçi aritmetiği olmadan) ve değer tipleri de vardır; bunlar geliştiriciye belleğin nasıl düzenleneceği üzerinde bir miktar kontrol verir. Hatalar istisna olarak fırlatılmak yerine fonksiyonlardan dönen sıradan değerlerdir, bu yüzden hata verebilecek her çağrıdan sonra genellikle if err != nil denetlenir.
Go'nun imza özelliği yerleşik eşzamanlılıktır. go anahtar sözcüğüyle başlatılan goroutine, diğerleriyle aynı anda çalışan hafif bir fonksiyondur; kanallar (channels) ise goroutine'lerin birbirlerine değerleri güvenle aktarmasını sağlar. Bu, bir mutfaktaki aşçıların hepsi aynı rafa saldırmak yerine bitmiş yemekleri servis penceresinden iletmesine benzer. Bu özellik Go'yu bulut altyapısında, ağ servislerinde, mikro servislerde ve Docker ile Kubernetes gibi yaygın konteyner araçları dahil komut satırı araçlarında popüler kılar.
Goroutine, bir işletim sistemi iş parçacığı (thread) ile aynı şey değildir. Go çalışma zamanı, çok sayıda goroutine'i daha küçük bir işletim sistemi iş parçacığı havuzunda zamanlar; bu yüzden bir goroutine yalnızca birkaç kilobayt yığınla başlar ve bir program yüz binlercesini çalıştırabilir. İşletim sistemi iş parçacıklarını oluşturmak ve aralarında geçiş yapmak daha ağırdır; Go programlarının mütevazı kaynaklarla çok sayıda eşzamanlı bağlantıyı yönetebilmesinin nedeni budur.
Önemli noktalar
- Go, kurulması gereken ayrı bir çalışma ortamı olmadan tek bir yerel çalıştırılabilir dosyaya derlenir.
- Statik tiplidir ve çöp toplamalıdır; özellik kümesi bilinçli olarak küçüktür.
- Goroutine'ler ve kanallar eşzamanlı programları yazmayı kolaylaştırır.
- Hatalar istisna olarak fırlatılmaz, değer olarak döndürülür.
- Bulut servislerinde, ağ araçlarında ve komut satırı programlarında popülerdir.
Örnek
package main
import "fmt"
func main() {
results := make(chan string)
for i := 1; i <= 3; i++ {
// Each goroutine runs concurrently and sends a message
go func(id int) { results <- fmt.Sprintf("worker %d done", id) }(i)
}
for i := 0; i < 3; i++ {
fmt.Println(<-results) // Receive one message from the channel
}
}Sık sorulan sorular
Go neden Golang diye de anılır?
Dilin resmî adı Go'dur, ancak ilk web sitesi golang.org idi ve "golang" ifadesi, yaygın bir sözcük olan "go"dan çok daha kolay aranır. İki ad da aynı dili ifade eder.
Go'da sınıflar var mı?
Hayır. Go, veriyi gruplamak için struct kullanır ve tanımladığınız herhangi bir tipe metot eklemenize izin verir; sınıf kalıtımı yerine arayüzlere ve bileşime dayanır.
Go çöp toplamalı mı?
Evet. Go, kısa duraklamalar için tasarlanmış eşzamanlı bir çöp toplayıcıya sahiptir; bu yüzden geliştiriciler belleği elle serbest bırakmaz, ancak ayırmaları azaltmak için yine de işaretçileri ve değer tiplerini kullanabilir.
Sık karşılaştırılanlar
İlgili sayfalar
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- Threadİşletim Sistemleri, s. 34Thread, işletim sisteminin zamanlayabileceği en küçük yürütme birimidir; bir process içinde çalışır ve o process'in belleğini diğer thread'lerle paylaşır.
- Çöp toplamaProgramlamanın Temelleri, s. 9Çöp toplama, dil çalışma zamanının programın artık kullanamadığı verileri bulup bu belleği yeniden kullanıma açtığı otomatik bellek yönetimidir.
- InterfaceProgramlamanın Temelleri, s. 26Interface, bir türün sağlamayı vaat ettiği metot ve özellik imzalarından oluşan adlandırılmış bir kümedir; bu üyelerin nasıl gerçekleştirildiğini söylemez.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- DockerDevOps ve Bulut, s. 15Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin