-- Go

Go Programlama Diline Genel Bakış

Go Programlama Diline Genel Bakış

Yazılım dünyasında yeni bir teknoloji öğrenirken geliştiricinin ilk görmek istediği şey teknolojiye yukarıdan bir bakış atmaktır. Bu nedenle ilgili teknolojiye giriş ve genel bir bakış eğitim materyalleri önemlidir. Bu makalemde de bir süredir üzerine video ve makaleler oluşturduğum Go programlama diline genel bir bakış yapmaya çalışacağız. Bu genel bakış sırasında pek kod görmeyeceksiniz. Sadece teorik olarak inceleyip, size bu dilin ne olduğunu, hangi amaçla kullanılabileceğini, nerelerde tercih edilmemesi gerektiği, çeşitli kaynak ve önerilerde bulunacağım.

Go Nedir ve Neden Geliştirilmiştir?

Google gibi bir teknoloji ve yazılım devinin kendi iç sistemlerinde yıllardır kullandığı C, C++, Java, Python vb. bir çok farklı programlama dili ve teknolojinin farklı farklı avantaj ve dezavantajları vardır. Bunları küçük ya da az yük altındaki projelerde fark edemeyebilirsiniz, ancak büyük projelerde mutlaka kendini hissettirir. Bunlar performans, derleme(büyük projelerde kaynak kodun derlenmesi saatler sürebilir) güvenlik, uyumluluk, zaman yönetimi, kaynak(donanım, para, enerji vb.) yönetimi gibi bir çok başlıkta sıralanabilir. Ve tabi ki yüzlerce ya da binlerce geliştiriciniz varsa ilgili etki alanı için yeni bir uzman alımı yaparken bilmesi ya da öğrenmesi gereken bir çok teknolojiyi de beraberinde getirir. Yani sorun hem teknik hem de mentaldir.

Google bunlar gibi bir çok sorununu çözmek için yıllardır hem iç sistemleri için işletim sistemi hem de bir çok teknoloji ve algoritma üretmektedir. Go programlama dili de bunlardan biridir. Go programlama dili Google tarafından kendi sorunlarını çözmek için başlatılmıştır. Bu nedenle Go’ya eklenen ya da eklenmeyen tüm özellikler tamamen yılların “büyük projelerdeki yazılım tecrübeleri” ile belirlenmiş ve alınmış kararlardır. Mesela Go’yu biraz incelediğinizde “Go’da neden jenerikler yok?” gibi bir soru aklınıza gelebilir ki bunu soran ilk kişi değilsiniz. Buna Go geliştirici ekibinin verdiği yanıt ise özetle; “Jenerikler performanslı-hızlı değil, henüz bu şartlarda bir çözüm bulamadık, bulduğumuzda ekleriz”. Go ile ilgili bakış açısı bu kadar net aslında. Amaç, az dil özelliği ve kuralıyla esnek, hızlı, performanslı ve güçlü bir dil oluşturmaktır!

Go tamamen açık kaynaklı bir dildir. Yani Go kaynak kodunu satır satır inceleyebilirsiniz. Ve Google içerisinde Go’yu geliştirmekle sorumlu ekip bu dile kendileri katkı yaptığı gibi piyasada bu teknoloji kullanan bazı teknoloji devlerinin de dil hakkındaki görüş ve önerileri doğrultusunda çeşitli ek yetenekler üzerinde çalışmaya devam ediyorlar. Tabi ki bizim gibi sıradan geliştiricilerin de görüşlerini geliştirici toplulukları üzerinden takip ediyorlar.

Go dili Ken Thompson, Rob Pike, Robert Griesiemer tarafından 2007 tarihinde geliştirilmeye başlandı. İlk sürümünü yayınlamak için epey bir süre geliştirme ve iç sistemlerde testler yapıldı ve kullanılabilir ilk sürüm 10 Kasım 2009’da, ilk kararlı sürüm 1.0 versiyonu(1.0 versiyonu yazılımda olgunlaşmış ilk sürüm olarak kabul edilir) ise 28 Mart 2012’de Go 1.0 olarak yayınlanmıştır.

Go dili söz dizimini öğrenmek basittir. Ancak programlama gücünü C/C++ ile yarışacak kadar ispatlamıştır. Bu performans testleriyle ilgili bir çok kıyas(benchmark) makalesi yayınlanmaktadır. Go’nun “C gibi güçlü” hedefiyle geliştirilmeye başlanmasına karşın, web tarafında da hızla gelişmiş ve bir çok Framework çalışmasıyla şuan küresel çapta ciddi diyebileceğimiz bir çok proje tarafından tercih edilmektedir(Docker, Koding, Google vb.). Aynı zamanda basit ama güçlüdür ve ancak web yeniliklerine uyumlu olarak geliştirilmiştir. Mesela bir paketi ister lokal olarak oluşturup kod sayfanıza ekleyin, isterseniz de github.com gibi bir versiyon sistemi üzerinden doğrudan kod sayfanıza import kısmında linkini ekleyerek(tabi ‘go get’ ile lokal ortama kurulumu yapıldıktan sonra) kullanabilirsiniz.

Go dili geliştirici ekibinin temel prensiplerinden biri de “bir işi yapmanın en iyi yolunu bulursan farklı yöntemlere gerek yoktur” üzerine kuruludur. Bu nedenle farklı dillerde bir iş için bile her geliştiricinin farklı yöntemler kullanması olasıyken, Go dilinde o bir iş için genellikle bir yol vardır. Ancak o bir yolun performansı için belki binlerce profesyonel geliştiricinin geri bildirimleri alınmıştır.

Go tek bir dosyaya derlenir. Bu da tek bir binary dosyası üzerinde taşıma ve yönetim gerçekleştirebileceğiniz anlamına gelir ki, Java ve C# gibi dillerde taşıma-kopyalama işlemleri ciddi sorunlar ve vakit kayıplarına neden olabilir.

Go dilinde söz dizimi anlaşılır ve basittir. Go dili 25 adet keyword içerir. C(37 keyword), C++(84 keyword), C#, Java, Rust gibi bir çok dilde çok daha fazla keyword vardır.

Go uygulamanızın içerisinde C, Python gibi farklı dilleri doğrudan kodunuzu yazarak çalıştırabilirsiniz. (Örn; cgo)

Go dili kendi içinde gömülü olarak concurrency(eş zamanlılık) destekler. Ve bunu yüksek performanslı olarak gerçekleştirir. Alt seviye işlem yapmanıza gerek duymayacak şekilde thread mantığını da kendisi mimari olarak yönetir. Siz sadece farklı farklı goroutines’ler oluşturarak alt katmanda tek bir thread üzerinde yüzlerce-binlerce goroutines’ler uygulamanızı eş zamanlı hale getirebilirsiniz.

Go dili söz dizimi kurallarına çok önem verir ve dikkat eder! Yazılım dünyasındaki farklı söz dizimi alışkanlıklarından kaynaklı bir çok sorunu da böylelikle çözer. Örneğin import ile projenize bir paket dahil edip uygulama içerisinde o paketin referanslarını kullanmazsanız derleme aşamasında hata verecektir. Aynı şey basit bir değişken için bile geçerlidir. Değişkeni tanımladıysanız kullanmak zorundasınız, aksi halde Go derleme hatası verecektir. Bu konu ileri yazılım ve performans ile hafıza yönetimine doğrudan etkisi olan bir konudur. Hatta öyle ki, bir metodun scope’unu belirleyen süslü parantelerinin açılış kısmının tanımın altında mı yoksa metod imzasının yanında mı olduğuna bile dikkat eder. Tabi bu söz dizimi kurallarını yönetmek için de bir aracı vardır; ‘go fmt’

Doğru;

func add(x int, y int) int {
	return x + y
}

Yanlış;

func add(x int, y int) int 
{
	return x + y
}

Go Programlama Dili : Anahtar Kelimeleri

cihanozhancom-golang-keywords

Go Programlama Dili : Operatörler ve Sınırlayıcılar

cihanozhancom-operators-and-delimitersGo Programlama Dili : Türler

cihanozhancom-golang-typesGo Programlama Dili Hangi Amaçla Kullanılabilir?

Go dili sistem programlama odağıyla geliştirilmiştir. Yani sunucu ve alt sistemler yazmak için ideal bir çözüm olarak düşünülebilir. Ancak bunun yanında web için de hem hızlı geliştirme hem de yüksek performansıyla kaliteli projeler üretmenizi sağlayabilir. Aynı zamanda native olarak henüz tam uyumlu kullanılabilir olmasa da Google, Android işletim sistemi üzerinde Go kullanılabilmesi için bir mobil proje yürütmektedir. Go’nun github sayfası üzerinden mobil çalışma kaynaklarına ulaşabilir, internetten Go ile geliştirilen Android uygulama örneklerine inceleyebilirsiniz.

Go dili gömülü sistemler için de kullanılabilmektedir. Ancak genel olarak bu alan için henüz yeterli görülmemektedir. Gene ancak, Go’nun bu alanda da bir başarı hedeflediğini ve zamanla gömülü sistemler için de kendini genişleteceğini söyleyen otoriteler mevcuttur. Kaldı ki, gömülü(embedded) sistemler için C mi, C++ mı gibi bir soru bile C/C++ geliştiricileri arasında yıllardır tartışılan bir konudur.

Go programlamayla ilgili örnek embedded ve benzeri IoT ortam frameworkleri;

Go Programlama Dilinin Hangi Amaçla Kullanılması Tavsiye Edilmez?

Python ve Ruby gibi bir betik dili değildir. Yani Python’un yerini alması düşüncesi yerine Go’nun C ve Python gibi farklı alanlarda güçlü olan dillerle birlikte çalışabilmesi hedeflenmektedir.

Hemen yukarıda belirttiğim gibi gömülü sistemler için henüz yeterli değildir. Bu alanda C’nin gücü devam etmektedir. Ancak Go ile C iç içe kullanıldığında harika gömülü alt sistem uygulamaları geliştirilebilir.

Go Programlama Dili Kullanıcıları

Go dili yakın bir tarihte geliştirilmiş olsa da büyük projeler için ciddi tercih edilen bir teknoloji haline gelmesi uzun sürmedi. Bu girişim ve firmalardan bazıları şunlardır;

Docker, Koding, Google, Apple, Twitter, Amazon, Github, Ubuntu, Dropbox, Facebook vb.

Daha geniş bir kullanıcı listesine ulaşmak için; https://github.com/golang/go/wiki/GoUsers

Go Programlama Geliştirme Araç ve Ortamları

Go dili genel olarak açık kaynak kültüründe olduğu gibi bir çok araç ve geliştirme ortamı sunmaktadır. Bunlar şöyledir;

Araçlar;

Go tool: Go dilinin en temel aracıdır. Go uygulamanızın derleme esnasındaki işlemleri konsol üzerinden parametrik olarak yönetmenizi sağlar.

Godoc: Kod içerisinde, örneğin bir metod üzerinde yazdığınız açıklama satırına göre bir belgelendirme-dökümantasyon üretmeyi sağlar. godoc.org sitesi üzerinden de github ya da dilin gömülü özelliklerinin dökümanlarına online olarak ulaşmak mümkündür.

Örn; http://godoc.org/fmt#Println

Gofmt: Go dili söz dizimi kurallarını(bazıları katıdır) yöneten bir orkestra şefidir. Go kodu söz dizimi standartlarını uygular.

Geliştirme Ortamları(IDE’s);

Go Programlama Dili Kurulum ve Site Tanıtımı

Go dilinin ‘official’ web sitesi golang.org‘dur.

Yaygın Kullanılan Framework ve Araç Setleri

Not : Bu saydığım araç ve Framework’ler genel olarak kendi kullanmış olduğum ya da gözlemlediğim araçlardır. Ancak daha fazlası için Awesome Go‘yu ziyaret edebilirsiniz.

Önerilen Kaynaklar;

Go Geliştirci Camiaları

Bu Go programlama başlangıç makalesini güncel tutmaya gayret edeceğim.

@Medium; https://medium.com/@cihanozhan/go-programlama-diline-genel-bakış-fb802539bfc

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum

  1. Merak etmiştim neyin nesidir diye, C dilleri kadar gelişmiş midir diye, cevabimi aldım… Sadece bir üslupla klavyeye almışsınız. Takibinizdeyim. Yararlı bilgi. Her yazılımcının okuması gereken bir makale olduğunu düşünüyorum. Esen kalın… Instagram @nihatbyram