GOLang Nedir, Nerede Kullanılır ?

kondanta

Katılımcı Üye
29 Tem 2017
910
0
CNCF

Eminim ki hepiniz bir şekilde bu dili duymuşsunuzdur. GoLang ( konunun geri kalanında go diye belirteceğim ) 2007 yılında Robert Griesemer, Rob Pike, and Ken Thompson liderliğinde Google tarafından gelişitirilmiş çok amaçlı bir yazılım dilidir.

Burada vurgulamak istediğim şey, dilin geliştirilme tarihi. 2007. Yani multi-core architecturelara çoktan geçtiğimiz dönemler. Goyu Go yapan şey, goroutine denen özel bir tür multi threading aracı. Neyse oraya da geleceğiz.

Öncelikle obligatory hello world'ümüzü paylaşalım:
Kod:
package main
import (
    "fmt"
)
func main() {
    fmt.Println("Hello World!")
}

Şimdi biraz daha detaya girelim.

Şahsi deneyimim olarak, Goyu REST servisleri yazarken kullanıyorum, ki şuan aktif olarak yürttüğüm bir pojenin tüm backendi denebilir. Neden Goyu tercih ettiğimi özetlemem gerekirse, benchmarklarda en optimal sonucu veren kütüphaneler Goya ait. [ Gerçi şuan bakıldığında C h20 ile yok ediyor ortalığı ama ] Saniyede 50.000 isteğe cevap verebilme kapasitesinden bahsediyoruz, overheade sebep olmadan.

Bunun haricinde, Gonun syntaxı C ile hemen hemen aynı, ki Rust gibi C uyumluluğuna da sahip. Hatta go c diye bir komutla c de yazılmış api callarına gidip gelmenizi kolaylaştırmış yazarlar. Tabi ki C dediğimizde, önümüze pointerlar geliyor. Goda da fazlaca kullanıyoruz bu pointerları. Zaten performansının büyük bir kısmını buradan alıyor. Örneğin
Kod:
myVar := *[]collector.BaseModel
gibi. Bu kod, myVar değişkenini içerisinde collector paketinde bulunan basemodel objelerini tutan bir arraye çeviriyor. Ve evet fark edebileceğiniz üzere, syntaxı ters.
Kod:
// Alışık olduğumuz
BaseModel bm [] ;
// Go versiyonu
bm := []BaseModel

Son olarakta channel ve goroutineler ile ilgili bir örnek vereyim:
Kod:
package main
import "fmt"

func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {
    f("direct")
    go f("goroutine")
}

Output, Direct 1-2-3 diye genişlerken, go ile yazılmış fonkisyonda, ouput goroutine 1-2-3 diye printlenecek buraya kadar tamamız. Ama, f(direct)i gorouitne den sonra çağırmış olsaydık
goroutine1, direct1-2 gouroutine2 direct3 gibi bir output alacaktık.
Go rutini verilen fonskiyonu alıp izole eder, daha sonra kendisine ait bir threadde çalıştırır. Threat içerisinde sonucu aldıkta channel yardımıyla tekrar çağrıldığı yere döner.


Özetle,  Tobias Lütke'nin de dediği gibi, Go geleceğin server dilidir. Nerde ne zaman kullanayım sorusu ise, eğer hedefiniz aynı anda birden fazla isteği, birden fazla kullanıcı için handle etmekse, performansı önemsiyorsanız (aksini iddia ediyorsanız bu işi zaten bırakın, performansı önemsemeyen şirket/geliştirici yanlış alandadır) ve derlenen bir dil ile uğraşmak istiyorsanız Go sizlik. İstediğiniz gibi kullanabilirsiniz.


Tabii ki performans açısından en iyi demiyorum. Şu aralar benchmark bazında C herkese toz yutturuyor yukarıda da belirttiğim ve beklenen üzere. Ama Rust'ında ondan pek aşağı kalır yanı yok. Burada yapacağınız trade off, sizin için neyin daha önemli olduğudur.


Not: Konuya resim, copy paste metinler & kodlar eklemiyorum, ilginizi çektiyse, dil, küçük bir google araştırması yapın. Amacım sadece dili tanıtmak.
 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.