Go Programlama Dilinin Özellikleri

Bu yazıda son günlerde popülerliği gittikçe artan, sağda solda ‘değişik bir şey, bi ara bakıver mutlaka’ denen Go Programlama dilinden bahsetmek istiyorum.


Go Programlama Dilinin Özellikleri

Go’nun tarihçesi

C, Pascal, Alef ve Oberon gibi programlama dillerinden esinlenerek, bir iç projesi 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’nun avantajları

Go, bazıları bir çok programlama dilinde benzer olan, bazıları ise tamamen eşsiz özelliklerle geliyor. Go’nun en önemli özellikleri şunlar;

  • GO kodu platform bağımsız denebilir. Windows’da yazdığınız bir Go kodunu, sorun yaşamadan Unix bir makinede derleyip çalıştırabiliyorsunuz.
  • Go prosedürel (procedural), eş zamanlı (concurrent) ve dağıtık (distributed) programlama desteğine sahip.
  • Go güçlü bir ‘çöp toplama’ yani ‘garbage collection’ mekanizmasına sahip, bu da sizi hafıza atama ve temizleme derinden kurtarıyor. ( Daha önce geldiğiniz programlama diline göre bu sizin için hiçbir şey ya da çok şey ifade edebilir)
  • Go’da bir ön işleyici (preprocessor) gereği yoktur ve çok hızlı derleme yapar.
  • Go ile web uygulamaları ve test amaçlı web sunucular oluşturabilirsiniz.
  • Standart Go kütüphanesi size çok sayıda paket sunar, bu paketler Go’yu geliştiren ekip tarafından test ve debug yapıldığı için neredeyse hatasız kabul edebilirsiniz.
  • 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 Go nesne tabanlı programlamayı doğrudan desteklemez ve bu konuda dalga geçilen PHP’nin bile çook çoook uzun zamandır nesne tabanlı programlama desteği olduğu düşünülünce bu özellikle nesne tabanlı programlama dillerinde kodlama yapmaya alışkın geliştiriciler için zor olabilir.

Go’nu katı kuralları

Go bir çok programlama diline göre katı kurallar ile geliyor, sizi iyi ve temiz kod yazmaya zorluyor. Bu başta can sıkıcı olsa da kodunuzun okunurluğunu arttırdığı gibi hata ve bug içerme olasılığını da azaltıyor.

Örneğin;

Çoğu programlama dilin, bir paket veya kütüphaneyi using veya import betikleri ile programınıza dahil edebilirsiniz ve kodunuzun içinde bunları kullanmasanız da sorun olmaz. Go’da import ettiğiniz bir paketi kullanmıyorsanız hata ile karşılaşırsınız. ( IDE’nizin eklentileri hataya mahal vermeden ilgili satırı kaldırabilirler ama o ayrı bir konu )

Benzer şey değişkenler için de geçerli. Bir değişkeni tanımladıysanız, ona bir değer atamış dahi olsanız bu değişken gerçekten kullanılmıyorsa hata alırsınız. Değer atadığıma göre kullandım diye düşünmeyin.

Benzer bir durum köşeli ayraçlar içinde geçerli, diğer dillerde ayraçı koşuulu ifade veya tanımlama ile aynı satır veya bir alt satırda kullanmanız farketmez, fakat GO alt satırda olması durumunda hata verecektir.

package min

import (
    "fmt"
)

func main() 
{
    fmt.Println("Bu kod hata vereceği için bu mesaj ekrana hiç yazılmayacaktır!")
}

Yukarıdaki kod hata verecektir ve düzeltilmesi için şu şekilde yazılmalıdır;

package min

import (
    "fmt"
)

func main() {
    fmt.Println("Bu kod hata vermeden çalışacaktır!")
}

Go’da hata işleme ( Error Handling )

Go’da Hata ve hata işleme birbirinden çok farklı iki konu. Go hata mesajlarını o kadar çok seviyor ki hata ‘error’ türünde bir tip tanımlaması bile var. (string, integer, float vs. vs. gibi bir de error tipi var) Yani Go’nun size sağladığı bir hata mesajını yeterli bulmazsanız hemen ‘error’ tipinde bir hata mesajı oluşturabilirsiniz. Hatta bir Go paketi oluştururken kendi hatalarınızı ve hata işleyicilerinizi tanımlamak zorundasınız.

Go’da hata (error) mesajları diğer programlama dillerindeki istisnalar (exception) gibi değildir. Go’daki hatalar sadece fonksiyondan ‘error’ tipinde dönen Go nesneleridir ve bu nesne ile ne yapılacağını sizin tanımlamanız gerekir.

Go error veri tipi

Go’da uygulama geliştirirken çoğu zaman hataları bizzat tanımlamanız gerekecek. Go dilinde alışkın olduğumuz gibi istisna fırlatmak, false veya boş değer dödürmek gibi yöntemler yerine, hataysa ‘hata’ tipinde Go nesneni döndürüyoruz.

Şimdi Go’da yeni bir hata nasıl tanımlanır onu inceleyelim.

package main

import (
    "errors"
    "fmt"
)

func exampleError(x, y int) error {
    if x == y {
        return nil
    } else {
        err := errors.New("The numbers are not equal")
        return error
    }
}

func main() {
    err := returnError(1,1)
    if nil == error {
        fmt.Println("The numbers are qeual")
    } else {
        fmt.Println(err)
    }

    if "The numbers are not equal" == error.Error() {
        fmt.Println("Please try again!");
    }
}

Yukarıdaki kodda int tipinde iki değişken alan ve error tipinde bir sonuç döndüren bir fonksiyon tanımladık.

Eğer değerler birbirine eşitse değer olarak nil döndürüyor. nil içerikli bir error mesajı da hata olmadığı anlamına geliyor.

Fakat aksi durumda errors paketinin New metodu ile yeni bir hata oluşturuyor ve hata mesajını da string olarak bu metoda gönderiyoruz. Sayıların birbirine eşit olmadığı durumda oluşturduğumuz bu hata mesajı döndürülmüş oluyor.

Sonraki Adım: Go Kurulumu

“Go’yu kurmadan örnek kodlar verdin, hatta işleme anlattın, şimdi Go kuralım diyorsun” diye düşünebilirsiniz. Şimdiye kadar anlattığım kodlar Go’daki yaklaşımı açıklamak içindi. 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.

Bir soru, öneri ya da yorumunuz mu var?

Evren Bal

Ben Evren BAL

1996'dan beri ‘Internet canlısıyım!’

Evren Bal Hakkında daha fazla bilgi.

Tanışmak isterseniz hemen sosyal medyadan iletişime geçebilirsiniz.

Bana Ulaşın

Bana Ulaşın

  • Bir sorunuz mu var?
  • Yazıda bir hata mı farkettiniz?
  • Sayfa ile ilgili bir öneriniz mi var?
  • Yazmamı önereceğiniz bir konu mu var?

Lütfen iletişim formunu kullanarak veya sosyal medya hesaplarımdan bana ulaşın.

Digital Ocean Logo

VPS sunucusu denemek ister misiniz?

Digital Ocean'a referans bağlantımdan kayıt olarak yeni oluşturacağınız hesabınızı 60 gün geçerli 100$ kredi ile açabilirsiniz. Bu miktar yüksek performanslı VPS'leri bile denemeniz için yeterlidir.

Yapacağınız onca kurulumun boşa gitmemesi için benim tavsiyem uzun vadede kullanabileceğiniz özellik ve maliyetlerde bir sunucu oluşturmanızdır.

Ücretsiz 100$ kredi bağlantısı

60 günlük denemeniz sonunda eğer devam etmek istemezseniz hiç bir ücret ödemeyeceksiniz. Hizmeti kullanmaya devam etmek isterseniz harcamanız 25$'a ulaştığında benim hesabıma da 25$ kredi yüklenecektir.

Diğer bir deyişle, siz 100$ ücretsiz krediyi her halükarda kazanırken, daha sonra ücretli devam etmeye karar verirseniz ben de 25$ kredi kazanacağım.

Copyright © 2022 - Evren BAL