Go Synax Ve Tipler

Bu yazıda Go programlama dilinde temel söz dizimi (syntax) ve tiplerden (types) bahsedeceğim

Değişken tanımlama

Go dilinde değişken tanımlamak için var anahtar sözcüğü kullanılır.

var i int

Ayrıca değişkeni tanımlarken tanımladığımız değişkene değer atayabiliriz

var i int = 0

Go dilinde değişken tanımlarken kısa değişken tanımlama yöntemini de kullanabiliriz

s := "Furkan"
i := 2

Kısa değişken tanımlama yöntemi ile değişken tanımladığımızda değişkenin tipi, atadığımız değer ne ise o olur. Yukarıdaki örnekte s değişkeninin tipi string, i değişkeninin tipi int dir

Çoklu Atama

Go dilinde aynı satırda birden fazla değişken ataması yapabilirsiniz.

h,j,k,l := true, "Furkan", 2.05, 25

Çoklu atama yaparken aynı satırda atama yaptığımız değişlenlerin tiplerinin aynı olması gerekmez.

Yukarıdaki örnekte h değişkenine bir bool değer, j değişkenine bir string değer, k değişkenine bir float değer ve l değişkenine bir int değer atanmıştır.

Zero Values

Go dili ile beraber gelen tiplerin ön tanımlı değerleri vardır. Bu tiplede değişken oluştururken herhangi bir değer ataması yapmazsanız oluşturduğunuz değişkenlerin değeri ilgili tipin zero value değeri olur.

Go dilindeki tiplerin ön tanımlı değerleri aşağıdaki gibidir.

int = 0
string = ""
float = 0
bool = false

Go dilinde tiplerin ön tanımlı değerleri olması dolayısıyla bazı dillerde olduğu gibi undefined değerler ile karşılaşmazsınız

İsimlendirme Kuralları

Go dilinde değişkenleri isimlendirmek oldukça esnek olsa da bazı kurallar vardır.

  • Değişken isimleri tek kelime olmalıdır(boşluk yok)
  • Değişken isimlerinde harf, rakam ve alt tire olabilir
  • Değişken isimleri rakam ile başlayamaz

Örnekler

DoğruYanlışSebep
userNameuser-nametire kullanılamaz
user11userdeğişlenler rakam ile başlayamaz
user$userdeğişkenlerde sembol kullanılamaz

Bir diğer önemli nokta büyük küçük harf duyarlılığıdır. Yani userName, UserName ve USERNAME bitbirinden farklı değişlenlerdir

İsimlendirme Stili

Go dilinde değişkenlere kısa isim vermek yaygındır. user ve userName arasında bir seçim yapılacaksa, seçiminiz user olsun

Örnekler

Kabul Gören KullanımKabul Görmeyen KıllanımSebep
userNameuser_namealt çizgi geleneksel kullanıma uymaz
iindexdaha kısa olduğundan index yerine i tercih edilir
serveHTTPserveHttpkısaltmalar büyük harf olmalı
userIDuserIDkısaltmalar büyük harf olmalı

Nümerik Tipler

Go dilinde iki çeşit sayısal tip vardır

  • Birincisi mimariden bağımsız olarak, tipin doğru boyuta(byte) sahip olacağı anlamına gelir
  • İkincisi implementasyona özgü tiplerdir ve bu tiplerin boyutu(byte) uygulamanın derlendiği mimariye göre değişiklik gösterir.

İmplementasyona özgü tipler

int, uint, uintptr

Overflow vs Wraparound

Compile zamanında eğer compiler bir değişkene atanan değerin, o değişken tipinin max değerinden büyük olduğunu saptarsa owerflow error fırlatır

var maxUint32 := 4294967295 // Max Uint32 size
fmt.Println(maxUint32)

başarılı bir şekilde derlenir ve ekrana 4294967295 yazar

fmt.Println(maxUint32 + 1)
runtime da 1 eklersek wraparound olur ve ekrana 0(sıfır) yazar

var maxUint32 := 4294967295 // Max Uint32 size
fmt.Println(maxUint32 + 1)

compile olmaz.

Stringler

Eğer string oluştururken tek tırnak (’) kullanırsak bir raw string oluşturmuş oluruz. Eğer çift tırnak (") kullanırsak bir interpreted string oluşturmuş oluruz

s1 := 'Raw string'
s2 := "Interpreted string"

UTF-8

Go dili hiç bir kütüphane, paket, veya kuruluma gerek duymakszın default olarak utf-8 destekler.

Constant

Constant lar değişkenler gibidir ancak bir kere değer atandığı zaman tekrar değiştirilemezler

const gopher = "GOPHER"

IOTA

Go dilinde iota, constant tanımlarken artan sayılarda değer üretimini basitleştirmek için kullanılır

const (
	Apple int = iota
	Orange
	Banana
)

Değerleri ekrana yazdırırsak çıktısı aşağıdaki gibi olur.
Apple = 1 Orange = 2 Banana = 3