giriiş
Go, Google tarafından geliştirilen açık kaynaklı bir programlama dilidir. Yazılım geliştiricileri, web uygulamaları, bulut ve ağ hizmetleri ve diğer yazılım türlerini geliştirmek için çeşitli platform ve çerçevelerde Go kullanır.
Go, statik olarak yazılmış, açık ve C programlama diline göre modellenmiştir. Hızlı başlatma süresi, düşük çalışma zamanı yükü ve sanal makine (VM) olmadan çalışabilme özelliği, onu mikro hizmetler ve diğer uygulamalar yazmak için oldukça popüler bir dil haline getirmiştir. Ayrıca Go, birden fazla görevi aynı anda, sırasız veya kısmi sırayla yürütme stratejisi olan eş zamanlı programlama için de kullanılır.
Go, Python'un verimliliğinden ve görece basitliğinden ilham alır. Hafif süreçler (goroutine) ve verimli bağımlılık yönetimi için bir dizi paket kullanır. Yavaş derleme süreleri, kontrolsüz bağımlılıklar, tekrarlanan emek, otomatik araçlar yazma zorluğu ve diller arası geliştirme gibi çeşitli sorunları çözmek için tasarlanmıştır.
Go'nun bazı temel özellikleri şunlardır:
- Basitlik: Go, öğrenmesi ve kullanması kolay olacak şekilde tasarlanmıştır. Sözdizimi basit ve anlaşılır olduğundan, hem yeni başlayanlar hem de deneyimli programcılar için iyi bir seçimdir.
- Eşzamanlılık: Go, geliştiricilerin çok çekirdekli ve dağıtılmış sistemler için verimli ve ölçeklenebilir kod yazmalarına olanak tanıyan yerleşik eşzamanlılık desteğine sahiptir.
- Çöp Toplama: Go, geliştiricilerin bellek ayırma ve kaldırma konusunda endişelenmesini engelleyen otomatik bellek yönetimine sahiptir.
- Hızlı derleme süresi: Go, geliştirme sırasında hızlı bir şekilde yinelemeyi kolaylaştıran hızlı bir derleyiciye sahiptir.
- Platformlar arası destek: Go, Windows, Linux ve macOS dahil olmak üzere birçok farklı platformda çalışacak şekilde derlenebilir.
- Güçlü tipleme: Go, derleme zamanında hataların tespit edilmesine yardımcı olan, çalışma zamanında olmayan statik tiplemeli bir dildir.
- Go, büyük ve büyüyen bir geliştirici topluluğuna sahiptir ve Google, Uber ve Dropbox gibi birçok tanınmış şirket tarafından kullanılmaktadır.
Go programlama dili hakkında bazı önemli noktalar şunlardır:
- Go statik tipli bir dildir, yani bir değişkenin türünün kullanılabilmesi için önceden bildirilmesi gerekir.
- Go'da, ihtiyaç duyulmadığında belleği otomatik olarak boşaltan dahili bir çöp toplayıcısı bulunur.
- Go, geliştiricilerin çok çekirdekli ve dağıtılmış sistemler için verimli ve ölçeklenebilir kod yazmalarına olanak tanıyan güçlü bir eşzamanlılık desteğine sahiptir.
- Go, öğrenmesi ve okuması kolay, minimalist bir söz dizimine sahiptir.
- Go, modern donanım mimarileri için optimize edilmiş kod üreten hızlı bir derleyiciye sahiptir.
- Go, ağ oluşturma, şifreleme ve dosya yönetimi gibi çok çeşitli işlevleri destekleyen standart bir kütüphaneye sahiptir.
- Go, büyüyen bir geliştirici topluluğuna ve üçüncü taraf paketler ve araçlardan oluşan canlı bir ekosisteme sahiptir.
- Go, birçok ünlü şirket tarafından büyük ölçekli dağıtık sistemler ve yüksek performanslı uygulamalar oluşturmak için kullanılıyor.
- Genel olarak Go, modern uygulamalar ve dağıtık sistemler oluşturmak için oldukça uygun, güçlü ve verimli bir programlama dilidir. Eşzamanlılık ve minimalist söz dizimi için güçlü desteği, ölçeklenebilir ve verimli uygulamalar oluşturmak isteyen geliştiriciler için onu cazip bir seçenek haline getirir.
Go'nun basit bir söz dizimi ve basit bir tip sistemi vardır, bu da onu daha önce programlama deneyimi olmayan kişilerin bile öğrenmesini ve kullanmasını kolaylaştırır.
İşte Go'da bir "Merhaba Dünya" programı:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}Go programlarını kuruluma gerek kalmadan çalıştırabileceğiniz The Go Playground, repl.it gibi çeşitli çevrimiçi IDE'ler mevcuttur.
Go'yu bilgisayarınıza veya dizüstü bilgisayarınıza kurmak için şu iki yazılıma ihtiyacımız var: Metin Düzenleyici ve Derleyici.
Metin Düzenleyici: Bir metin düzenleyici, kaynak kodunuzu yazabileceğiniz bir platform sağlar. Metin düzenleyicilerin listesi aşağıda verilmiştir:
- Windows Not Defteri
- İşletim Sistemi Düzenleme komutu
- Kısa bilgi
- Epsilon
- vm veya vi
- Emacs
- VS Kodu
Bir Go derleyicisi bulma: Go dağıtımı, FreeBSD (sürüm 8 ve üzeri), Linux, Mac OS X (Snow Leopard ve üzeri) ve 32-bit (386) ve 64-bit (amd64) x86 işlemci mimarilerine sahip Windows işletim sistemleri için kurulabilir ikili dosyalar olarak mevcuttur.
Go'da ilk programınızı yazmak:
package main
import "fmt"
func main() {
// prints geeksforgeeks
fmt.Println("Hello, geeksforgeeks")
}Go programı sözdizimi açıklaması:
1. Satır: Programın genel içeriğini barındıran ana program paketini içerir. Program yürütmenin başlangıç noktasıdır, bu nedenle yazılması zorunludur.
Satır 2: "fmt" içe aktarma ifadesini içerir. Go'da (Golang), içe aktarma ifadesi, yerleşik dil özelliklerinin ötesinde ek işlevler sağlayan harici paketleri dahil etmek için kullanılır. Bu durumda "fmt", girdi ve çıktıyı biçimlendirmek için işlevler sağlayan bir pakettir.
Satır 3: Ana fonksiyon programın yürütülmesini başlatır.
Satır 4: fmt.Println(), ekrana çıktı olarak bir şey yazdırmak için kullanılan standart bir kütüphane fonksiyonudur. Bu pakette fmt, çıktıyı görüntülemek için kullanılan Println metodunu da içerir.
Yorum: Yorumlar, kodu açıklamak için kullanılır ve Java, C veya C++'da benzer şekilde kullanılır. Derleyiciler yorum girişlerini yok sayar ve çalıştırmaz. Yorumlar tek satırlı veya çok satırlı olabilir.
Peki bu “Go dili” neden?
Çünkü Go, yorumlanmış ve dinamik olarak yazılmış bir dilin programlama kolaylığını, yazılmış ve derlenmiş bir dilin verimliliği ve güvenliğiyle birleştirmeye yönelik bir girişimdir. Ayrıca, ağ tabanlı ve çok çekirdekli bilgi işlem desteğiyle modern olmayı da hedeflemektedir.
Go'dan başka başka dillerde ne var?
- Go, kelimenin her iki anlamıyla da yazmayı azaltmayı hedefliyor. Geliştiriciler, tasarımı boyunca karmaşayı ve karmaşıklığı azaltmak için çalıştılar.
- İleri bildirimler ve başlık dosyaları yoktur. Her şey tam olarak bir kez bildirilir.
- Kekemelik, := declare-and-initialize yapısını kullanarak basit tip türetmeyle azaltılır.
- Hiçbir şekilde hiyerarşi yoktur: tipler sadece vardır, ilişkilerini beyan etmek zorunda değillerdir.
Donanım sınırlamaları
On yılda donanım yapılandırmasının ve işlemenin çok yavaş bir hızda değiştiğini gördük. 2004'te P4'ün saat hızı 3,0 GHz'di ve şimdi 2018'de Macbook Pro'nun saat hızı neredeyse 2,3 GHz'e (2,66 GHz) çıktı. Performansı artırmak için daha fazla işlemci kullanıyoruz, ancak daha fazla işlemci kullanmak maliyeti de artırıyor. Bu nedenle sınırlı işlemciler kullanıyoruz ve sınırlı işlemciler kullanarak, iş parçacığı oluşturma (Threading) özelliği daha fazla bellek kullanan ve sistemimizin performansını düşüren ağır bir programlama diliyle karşı karşıya kalıyoruz. Bu nedenle, bu sorunun üstesinden gelmek için Golang, iş parçacığı oluşturmak yerine, iş parçacığı oluşturmaya benzer ancak çok daha az bellek tüketen Goroutine kullanacak şekilde tasarlanmıştır.
Örneğin threading 1 MB, Goroutine ise 2 KB bellek tüketiyor, dolayısıyla aynı anda milyonlarca Goroutine çalıştırabiliyoruz.
Dolayısıyla yukarıda tartışılan nokta Golang'ı aynı anda C++ ve Java'yı işleyebilen güçlü bir dil haline getiriyor.
Go Dilinin Avantajları ve Dezavantajları
Avantajları:
- Esnek – öz, basit ve okunabilir.
- Eşzamanlılık – Bu, birden fazla işlemin aynı anda ve verimli bir şekilde çalışmasına olanak tanır.
- Hızlı sonuç – derleme süresi çok hızlıdır.
- Kütüphane – Zengin bir standart kütüphane sağlar.
- Çöp Toplama – Go'nun temel özelliklerinden biri, Go'nun bellek ayırma konusunda çok fazla kontrol sağlamada üstün olması ve çöp toplamanın son sürümlerinde gecikmeyi önemli ölçüde azaltmış olmasıdır.
- Arayüz ve tür gömme için doğrulama yapar.
- Eşzamanlılık: Go, eşzamanlılık için mükemmel destek sağlayarak, aynı anda birden fazla görevi gerçekleştirebilen kod yazmayı kolaylaştırır. Bu, birden fazla işlemi aynı anda yürütebilen kod yazmanıza olanak tanıyan goroutine'ler ve kanallar aracılığıyla sağlanır.
- Performans: Go, performans ve düşük bellek tüketimine odaklanarak hızlı ve verimli olacak şekilde tasarlanmıştır. Bu sayede, yüksek performanslı ağ hizmetleri oluşturmanın yanı sıra karmaşık hesaplama problemlerini çözmek için de uygundur.
- Basitlik: Go'nun basit bir söz dizimi ve basit bir tip sistemi vardır, bu da daha önce programlama deneyimi olmayan kişilerin bile öğrenmesini ve kullanmasını kolaylaştırır.
- Çöp Toplama: Go, sizin için belleği otomatik olarak yöneten yerleşik bir çöp toplayıcıya sahiptir. Bu, manuel bellek yönetimi ihtiyacını ortadan kaldırır ve manuel bellek yönetiminden kaynaklanabilecek bellek sızıntıları ve diğer hataların olasılığını azaltır.
- Statik Tiplendirme: Go, statik tiplendirmeli bir dildir; yani tipler derleme zamanında belirlenir. Bu, daha güçlü tip güvenliği sağlar ve tip hatalarını oluşmadan önce tespit etmeyi kolaylaştırır.
Dezavantajları:
- Hakkında çok fazla tartışma olmasına rağmen, jenerikleri desteklemiyor.
- Bu programlama diliyle dağıtılan paketler oldukça kullanışlıdır, ancak Go geleneksel anlamda nesne yönelimli değildir.
- Bazı kütüphaneler, özellikle de kullanıcı arayüzü araç takımı eksik.
- Sınırlı nesne yönelimli özellikler: Go, kalıtım ve çok biçimlilik gibi nesne yönelimli özelliklerin tamamından yoksundur. Bu durum, özellikle geleneksel nesne yönelimli dillere alışkın geliştiriciler için karmaşık programlar yazmayı zorlaştırabilir.
- Genel Kod Yok: Go'da genel kodlar için yerleşik destek yoktur, bu da yeniden kullanılabilir kod yazmayı zorlaştırır.
- Olgunlaşmamış standart kütüphane: Go standart kütüphanesi nispeten yeni ve hala olgunlaşma aşamasındadır, bu da belirli bir görev için ihtiyaç duyduğunuz araçları bulmanızı zorlaştırabilir.
Go dilinde geliştirilen bazı popüler uygulamalar
- Docker: Linux kapsayıcılarını dağıtmak için bir araç seti
- Openshift: Red Hat'in hizmet olarak sunduğu bir bulut bilişim platformu.
- Kubernetes: Birleşik Otomatik Dağıtım Süreçlerinin Geleceği
- Dropbox: Kritik bileşenlerinin bir kısmını Python'dan Go'ya taşıdı.
- Netflix: Sunucu mimarilerinin iki kısmı için.
- InfluxDB: InfluxData tarafından geliştirilen açık kaynaklı bir zaman serisi veritabanıdır.
- Golang: Dilin kendisi Go ile yazılmıştır.









