Kıssadan Golang [Yaşayan Yazı]
Enes Başpınar /11 Eki 2022
12 min read •––– views
Yaşayan Yazı, bir yerimden uydurduğum bir terimdir ve ileriki dönemde içeriği zenginleşecek ama şu anki haliyle de faydalı olabilecek yazıları belirtir.
Golang Nedir?
Golang, C gibi ama daha basit, hızlıca derlenebilen, multithread bir dildir. Daha çok mikroservis uygulamalarında kullanılır.
Temel Dosya İçeriği
- Basit bir Golang dosyasının yapısı (kodu çalıştırmak için
go run main.go
):
Yazdırma Biçimleri
- Farklı yazdırma fonksiyonlarına sahiptir.
Print
ile başlayanlar stdout'a yani konsola çıktı verir.Fprint
olanlar dosya ve tarayıcı gibi dış bir kaynağa,Sprint
olanlar ise çıktıyı character buffer'da saklar.
Tipler
- Veri tipleri şunlardır:
- Integer: int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64
- Float: float32, float64
- String: string
- Boolean: bool
- Null: nil
- Bir değerin tipini görmek istersek
reflect.TypeOf()
kullanabiliriz.
- Tür adlarıyla aynı fonksiyonları convert için kullanabiliriz.
Değişkenler
- Değişken farklı çeşitlerde tanımlanır.
Koşul Yapıları
if-else
yapısı parantezsizdir.
- Eğer bir fonksiyonun değerine göre işlem yapcaksak farklı bir sözdizimi daha mevcut.
switch
yapısının iki kullanımı vardır. Değişkenin eşitliğini kontrol edeceksek değişkeni verebiliriz. Aksi takdirde atlayabiliriz. Eğer altındakicase
ile ilerletmek istersekfallthrough
kullanabiliriz.
for
yapısının da farklı kullanımları mevcut.while
için ayrı bir yapı söz konusu değildir.
Fonksiyon
- Fonksiyonda tipleri verirken TypeScript'ten farklı olarak iki nokta kullanmayız.
- Birden fazla değer döndürebiliriz.
- Ve hatta döndüreceğimiz değerleri otomatik değişkene atayıp dönmesini sağlayabiliriz.
- Belirsiz sayıda argümanı koleksiyon olarak almak istersek
...
operatörünü kullanabiliriz. Bu fonksiyonlara variadic function denir.
=== Output:[0 0 0 0 0] [2.2 3.8] [Ali Veli ] [Ali Veli Ahmet] - type: [3]string
- Dizilerin elemanlarını iterate etmek istersek
range
kullanabiliriz.
=== Output:12345
=== Output:Index: 0 Letter: S Index: 1 Letter: e Index: 2 Letter: n Index: 3 Letter: t Index: 4 Letter: e Index: 5 Letter: n Index: 6 Letter: c Index: 7 Letter: e
- Sabit boyut demişken dinamik tanımı da bilmek isteriz.
map(type, len, cap)
, slice, map ve channel türünden nesne oluşturur ve bellekte yer ayırır.
- Dizinin bir parçasını almak istersek klasik dizi söz dizimini kullanabiliriz.
=== Output:[]int [3, 4]
- Dinamik diziye eleman eklemek için
append()
kullanırız. Ekleme yapılacak diziyi ve elemanları alır.
=== Output:[0 0 0 5 2 7 12]
Map
- Bildiğimiz anahtar değer çifti tutan veri tipi.
=== Output:map[name:Enes surname:Başpınar] map[name:Cem surname:Yılmaz]
- Bir anahtarın olup olmadığını kontrol etmek istersek exception fırlatmayacağı için farklı bir yol kullanmamız gerekir. Döndürdüğü ikinci değer işlemin başarılı olup olmadığını belirtir.
=== Output:value: ok false
- Herhangi bir anahtarı silmek istersek
delete()
kullanabiliriz.
=== Output:map[name:Cem]
Paket
- Kendi paketimizi de oluşturabiliriz.
Unit Testing
- Test dosyasının ismi test edilen dosyanın sonuna
_test
eklenmiş halidir. Bu iki dosya aynı dizinde olmalıdır.
Diğer
- Paketlerin dökümantasyonlarını görmek için
go doc fmt
yazabiliriz. Özel fonksiyon dökümantasyonu içingo doc fmt.Println
.