Go Hello World

Merhaba Gopher bugün Go (Golang) programlama dili hakkında konuşacağız. Go programlama dili Google’nın büyük problemlerini günümüzün güçlü programlama dilleriyle çözemediği için Google tarafından geliştirilmiştir.

Go geliştiricilerine Gopher denilmektedir. Bu yazının sonunda belki bizde artık Junıor Gopher olacağız.

Gopher

Go Nedir?  Kim Geliştirmiştir? 

Ken Thompson, Rob Pike ve Robert Griesemer tarafından 2007 yılında open source olarak ilk adımları Google’da atıldı. 10 Kasım 2009 yılında tanıtıldı ve 28 Mart 2012 tarihinde Go 1.0 olarak yayınlandı.

2 Temmuz 2012 tarihinde yapılan Go takımı ile ilk buluşmayı buradan izleyebilirsiniz.

Go denince akla ilk gelen şey basitlik. Go günümüzde kullanılan birçok güçlü programla dilinin en güzel özelliklerini alarak ortaya çıkmıştır. Peki günümüz programlama dillerinde yapamayıp Go ile çözebildiğimiz sorunlar nelerdir.

  • Building problemleri. Java 8 ile geliştirilen bir Spring boot projesi ortalama 25 saniye derlenirken. 200K Go kodu ortalama 10 saniyede derleniyor.
  • Çözüm yöntemlerinin karmaşıklaşması. Go’da bir problemi çözmek için sadece bir yöntem vardır.
  • Projeler büyüdükçe dosya sayılarının artması ve deployment problemlerinin giderek artması. Go tek bir dosyaya derlenir. Bir dosyadan deployment yapabilirsiniz.
  • Programlama dillerinin giderek karmaşıklaşan syntax yapısı. C’de 32, Java’da 51, C#’da 79 ve Go’da ise 25 tane keyword var.
  • Trafik altında yaşanan System Scaling problemleri. Kubernates üzerinde ortalama bir Go projesini scale etmek istediğimizde ortalama olarak 5-10 saniye arasında bir süreyle de bir pod kaldırabilirsiniz.

Open Source – Cross-Platform

Go open source bir programlama dilidir. Github üzerineki reposuna buradan erişebilirsiniz. Go Community’sine buradan erişebilirsiniz.

Go’nun desteklediği platformlara baktığımızda Linux, Windows ve Mac OS X gibi işletim sistemlerini görüyoruz. Go’yu çalıştırmak istediğiniz platforma göre derlemeniz yeterli olacaktır. Burada tüm her şey tek bir dosya içerisinde olacağından dolayı dosya boyutunu görünce biraz şaşırabilirsiniz.

Go mobil, web, gömülü sistemler üzerinde de çalışarak cross-platform destediğini bambaşka bir yere taşımıştır.

Go Functional Programming? Go Object-Oriented Programming? Go Procedural Programming?

C programlama dilini kullananlar için Go OOP’dir. Java, C# ve C++ kullananlar için Go kesinlikle OOP değildir.

Tam bu noktada şöyle bir şey diyebiliriz. Go Go’dur. Go’nun kendine has bir tarzı vardır ve bunlardan hiç birisiyle tam olarak eşleşmez. Go’nun keskin çizgileri yoktur. Go ile geliştirme yaparken OOP, Functional ve Procedural yöntemlerini kullanabilirsiniz. Golang.org üzerinde bu konu hakkındaki yazıya da göz atabilirsiniz.

Örnek olarak Go kullanımıza göre Type-Safety veya Dynamic-Typing değişir. Java veya C# kadar olmasa da ilkel seviyede OOP özelliklerini de kullanabilirsiniz. Örneğin bir tanımlama yaparken büyük harf ile yaparsanız public küçük harf ile başlarsanız private olacaktır.

Go Syntax?

Go syntax’i oldukça basit ve okuması çok kolay bir dil. Her şeyin başladığı yere main.go dosyası diyebiliriz. Aşağıdaki kod parçası ile Go dünyasına merhaba diyebiliriz.

package main

import "fmt"

func main() {
	fmt.Println("Hello World!")
}

Go turuna buradan katılabilirisiniz. Fatih Arslan’ın hazırlamış olduğu Go dokümanına göz atmak iyi bir fikir olabilir.

Hızlaca Go’nun diğer özelliklerine bakalım.

Go’da sınıf diye bir şey yok! C dilinde olan Struct’lar burada da var. Bu structlara interface uygulayabilir, metot ve alanlar ekleyerek bunları public veya private olarak tanımlayabilir ve tüm bunu inheritance edebilirsiniz.

Go’da generics diye bir şey yok! Basitlik, okunabilirlik, eş zamanlılık ve ölçeklenebilirlik için generics’leri dahil edilmemiş. Eğer bir gün performanslı bir generics modeli bulurlar ve bazı problemleri çözerlerse ekleyeceklermiş.

Go’da overloading diye bir şey yok! Metot veya operator overloading yapamıyorsunuz. Sebebiyse okunabilirliği ve performansı düşürmesi.

Concurrency is not parallelism in Go! Bir tane işlemciniz olduğunu düşünün uygulamanızı eş zamanlı olarak çalıştırabilir fakat paralel çalıştıramazsınız. Andrew Gerrand Go üzerinde concurrency is not parallelism eğitimine buradan ulaşabilirsiniz.

Goroutine aynı anda birden fazla metotun eş zamanlı olarak çalıştırılması ve durumlarının channel’ler üzerinden takip edilebilmesini sağlayan yapıya verilen addır.

Goroutine oluşturmak ve çalıştırmak düşük maliyetlidir. Çünkü işletim sisteminde yeni bir thread açmanıza gerek yoktur. Böyle bir maliyeti olmadığı için istediğiniz kadar goroutine oluşturup, başlatabilirsiniz. Ek olarak sistem üzerinde threadler değişse bile goroutine’ler koşmaya devam ediyor.

Bir metodu goroutine yapmak için çağırdığınız yerde veya metodu tanımlarken başına go yazmanız yeterli olacaktır. Goroutine hakkında detaylı bir makale okumak isterseniz buraya bakabilirsiniz.

Paket Yönetimi Paket yönetimini yapmak için iki farklı yöntem vardır. İlk yöntem GOPATH\src klasörüne kaynak kodu atarak uygulamanız içerisinde kullanmak. İkinci yöntem ise terminal üzerinden go get url komutunu kullanarak dependency eklemek.

Go’nun en önemli özelliklerinden biriside uygulamanız içerisinde C, Python gibi farklı dilleri doğrudan kodlayabilirsiniz. Bu da demek oluyor ki istediğiniz dilde dependency doğrudan ekleyebilir ve kullanabilirsiniz.

Try-Catch-Finally diye bir şey yok! Error handling yok sebebiyse performans. Error handlinglerimizi yapabilmek için çok güzel bir yöntem bulmuşlar. Go metotları günümüz dillerindeki gibi tek bir değer dönmüyor. Multi-Value değer dönebiliyor. Dönen değerlerden birisi error tipinde yaptığınız zaman Go dilinde error handling yapmış oluyoruz. Bu noktada bol bol if kontrol şartı kullanıyoruz.

Go’da error handling ile ilgili daha fazla bilgi edinmek istiyorsanız buradan ulaşabilirsiniz. Günümüz dillerinde kullanılan exception keyword’unu Go’da Panic ile eşleştirebiliriz. Go’da Panic hakkında daha fazla bilgi edinmek isterseniz buradan erişebilirsiniz.

Ek olarak Go’da testler yazabilir ve Godoc komutu ile test ve metotlarınızı analiz ederek standart bir dokümantasyon oluşturabilirsiniz. Go testleri adından ayırt ediyor. Test sınıflarının adlarının *_test.go bittiğinden emin olmalıyız.

“go test” komutu ile testlerinizi koşabilir sonuçlarını PASS veya FAIL olarak görebilirsiniz. Go testing hakkında daha fazla bilgi almak istiyorsanız buradan ulaşabilirsiniz.

Go’yu kimler kullanıyor?

Go’yu kullanan birçok büyük, küçük şirket var. Kendisini ispat eden Go şuanda popüler diller arasındadır.

Google, Apple, Facebook, Twitter, Dropbox, Amazon, Github, Adobe, Amazon gibi şirketler kullanmaktadır. Türkiye’de Go kullanan şirketlerse Peak Games, Trendyol, icibot, Insider, Optimum Yazılım. Go kullanan şirketlere erişmek için bu listeye göz atabilirsiniz.

Go Kurulumu

Go dilinin resmi sitesi https://golang.org/ dir.

Go’yu kurulum dosyasını buradan indiriniz ve bilgisayaranıza kurunuz.

Go’nun dokümanlarına buradan erişebilirsiniz.

Go’nun paketlerine buradan erişebilirsiniz.

Go’nun online IDE’sine buradan erişebilirsiniz.

Go Geliştiricileri için Kaynaklar

Go ile yazılmış basit bir rest api projesine erişmek için TIKLAYINIZ.