Go Programlama Dilinin Özellikleri

Sayfayı kopyala
💡 Özet (TL;DR):
- Kökeni: Google tarafından C, Pascal ve Oberon gibi dillerden esinlenerek geliştirilen, derleme hızı ve eş zamanlılık (concurrency) odaklı açık kaynaklı bir dildir.
- Kritik Hata Düzeltmeleri: Orijinal yazıdaki çalışmayan ve derleme hatası (compilation error) veren örnek Go kodu, standartlara ve güvenli nil kontrolüne uygun olarak tamamen düzeltilmiştir.
- Temel Kurallar: Kullanılmayan paketlerin veya değişkenlerin derleme hatasına yol açması ve süslü parantez
{}hizalamasının zorunlu olması gibi katı sözdizimi kuralları vardır.
1. Go'nun Tarihçesi
C, Pascal, Alef ve Oberon gibi programlama dillerinden esinlenerek bir şirket içi proje olarak başlayan Go, aslında Google'ın deneysel bir çalışmasıydı. Fakat başarıya ulaşan bu deney 2009 yılı sonlarında duyurularak kitlesel olarak kullanılan açık kaynaklı bir programlama diline dönüştü.
Go vs. Dinamik Diller (PHP / JavaScript)
| Özellik | Go (Golang) | Dinamik Diller (PHP / JS) |
|---|---|---|
| Derleme Tipi | Derlenen (Compiled) - Doğrudan makine koduna dönüşür. | Yorumlanan (Interpreted) / JIT. |
| Bağımlılık Yönetimi | Tek bir binary dosya üretir, sunucuda runtime gerektirmez. | Sunucuda PHP/Node.js motoru ve tüm bağımlılık klasörleri (node_modules vb.) gerekir. |
| Hata Yönetimi | Hatalar explicit (açık) olarak değer şeklinde döner ve kontrol edilir. | İstisnalar (Exceptions - try/catch) fırlatılır. |
| Sözdizimi Kuralları | Çok katı (kullanılmayan değişken/import derleme hatasıdır). | Esnek (kullanılmayan değişkenler sadece uyarı verir). |
2. Go'nun Avantajları
Go, bazıları birçok programlama dilinde benzer olan, bazıları ise tamamen eşsiz özelliklerle geliyor. Go'nun en önemli özellikleri şunlardır:
- Platform Bağımsızlığı: Go kodu platform bağımsız denebilir. Windows'ta yazdığınız bir Go kodunu sorun yaşamadan Unix tabanlı bir makinede derleyip çalıştırabiliyorsunuz.
- Çoklu Paradigma: Go prosedürel (procedural), eş zamanlı (concurrent) ve dağıtık (distributed) programlama desteğine sahip.
- Bellek Yönetimi: Go güçlü bir çöp toplama (garbage collection) mekanizmasına sahip; bu da sizi hafıza ayırma ve temizleme derdinden kurtarıyor.
- Hızlı Derleme: Go'da bir ön işleyici (preprocessor) gereği yoktur ve çok hızlı derleme yapar.
- Yerleşik Web Desteği: Go ile web uygulamaları ve test amaçlı web sunucuları oluşturabilirsiniz.
- Zengin Standart Kütüphane: Standart Go kütüphanesi size çok sayıda paket sunar. Bu paketler Go'yu geliştiren ekip tarafından test edildiği için neredeyse hatasız kabul edilebilir.
- Statik Bağlantılar (Static Linking): Go statik bağlantılar kullanır; bu da oluşturulan binary dosyaların aynı işletim sistemine sahip bilgisayarlara taşınıp çalıştırılabileceği anlamına gelir. Yani Go programınızı oluşturduktan sonra kütüphaneler, bağımlılıklar ve bunların farklı sürümleri ile boğuşmadan sadece binary dosya ile çalıştırabilirsiniz.
ℹ️ Öte yandan Go nesne tabanlı programlamayı doğrudan desteklemez. Nesne tabanlı programlama dillerinde kodlama yapmaya alışkın geliştiriciler için bu durum ilk başta alışılması zor bir deneyim olabilir.
3. Go'nun Katı Kuralları
Go, birçok programlama diline göre oldukça katı kurallarla gelir; sizi iyi ve temiz kod yazmaya zorlar. Bu başta can sıkıcı olsa da kodunuzun okunurluğunu artırdığı gibi hata içerme olasılığını da azaltır.
Örneğin:
- Kullanılmayan Paketler: Çoğu programlama dilinde bir paketi veya kütüphaneyi programa dahil edip kodunuzun içinde kullanmasanız da sorun olmaz. Go'da import ettiğiniz bir paketi kullanmıyorsanız derleme hatası alırsınız.
- Kullanılmayan Değişkenler: Benzer şey değişkenler için de geçerlidir. Bir değişkeni tanımladıysanız ve bu değişken kod içinde gerçekten kullanılmıyorsa derleme hata verir.
- Süslü Ayraç
{}Hizalaması: Diğer dillerde süslü parantezi koşullu ifadeyle aynı satırda veya bir alt satırda açmanız fark etmez. Ancak Go, parantezin alt satırda olması durumunda hata verecektir.
package main
import (
"fmt"
)
func main()
{
// Bu kod süslü ayraç alt satırda açıldığı için derlenmeyecektir!
fmt.Println("Bu kod hata verecektir!")
}
Düzeltilmiş ve derlenebilir versiyonu şu şekildedir:
package main
import (
"fmt"
)
func main() {
// Süslü ayraç fonksiyonla aynı satırda açılmalıdır
fmt.Println("Bu kod hata vermeden çalışacaktır!")
}
4. Go'da Hata Yönetimi (Error Handling)
Go'da hata yönetimi, diğer dillerdeki try-catch istisna (exception) yapısından çok farklıdır. Go'da hata (error), aslında bir interface (arabirim) veri tipidir.
Go'daki hatalar özel bir çalışma zamanı istisnası fırlatmaz. Fonksiyonlardan normal bir değer gibi error tipinde nesneler döner ve bu değerlerin nil olup olmadığını kontrol etmek geliştiricinin sorumluluğundadır.
Örnek Go Hata Tanımlaması ve Kontrolü
Aşağıdaki örnekte, iki sayının eşitliğini kontrol eden ve eşit olmama durumunda özel bir hata dönen derlenebilir Go kodunu inceleyebilirsiniz:
package main
import (
"errors"
"fmt"
)
// İki sayıyı karşılaştırıp error dönen fonksiyon
func exampleError(x, y int) error {
if x == y {
return nil // nil dönmesi hata olmadığını gösterir
}
return errors.New("the numbers are not equal")
}
func main() {
err := exampleError(1, 2)
// Güvenli nil kontrolü
if err == nil {
fmt.Println("The numbers are equal")
} else {
fmt.Println("Error:", err)
}
// Hata mesajı içeriğine göre özel işlem yapma
if err != nil && err.Error() == "the numbers are not equal" {
fmt.Println("Please try again!")
}
}
5. Sonraki Adım: Go Kurulumu
Kod yazmaya başlamak için 'Go Ubuntu Linux'da nasıl kurulur?' veya 'Go Windows 10'da nasıl kurulur?' yazılarımı inceleyebilirsiniz.
Kapak görseli: Renee French tarafından Creative Commons 3.0 Attributions lisansı ile lisanslanmıştır.
Bu Yazıda Yapılan Değişiklikler
- 11.05.2022: Yazı özeti düzenlendi.
- 21.06.2026: Derleme hatası veren Go örnek kodundaki tüm sözdizimi hataları giderildi, güvenli nil kontrolü eklenerek kod derlenebilir hale getirildi. "köşeli ayraçlar" terimi "süslü ayraçlar" olarak düzeltildi. Türkçe imla hataları (Windows'ta, Linux'ta, derdinden vb.) düzeltildi, TL;DR özet ve karşılaştırma tablosu eklendi.
