Her programın bazı verileri ve bilgileri bellekte saklaması gerekir. Veriler, belirli bir bellek konumunda saklanırlar.
Değişken dediğimiz şeyler, verilerin saklandığı bir hafıza konumuna verilen uygun bir isimdir. Bir adın dışında her değişkenin de ilişkili bir türü vardır.
Değişken türleri(int,string) ilgili veri kümelerini kategorilere ayırır, ram bellek üzerinde saklanma biçimlerini, tutabilecekleri değer aralığını ve üzerlerinde yapılabilecek işlemleri tanımlamaktadırlar.
Kısa bir girişten sonra go da nasıl değişken tanımlarız incelemeye başlayalım.
Var anahtar sözcüğü ile değişken tanımlama
İlk inceleyeceğimiz tür var anahtar sözcüğü ile oluşturulan olucaktır.Burda dikkatini çeken şey tiplerin değişken isimlerinden sonra gelmesi olabilir.Çoğu programlama dilinden farklı olarak golang’te öncelikle değişken adı sonra türü gelmektedir.Aşağıdaki örneği inceleyelim.
var a int
var b bool
a = 15
b = false
Short-hand notation (:=) ile değişken tanımlama
a := 15
b := false
Bu şekilde bir tanımlama yaptığınız zaman sadece bir deklarasyon yapmakla kalmayıp aynı zamanda bir değer ataması yapmış oluyorsunuz; ancak bazı göz ardı etmememiz gereken hususlar var. Örneğin, yukarıdaki yöntemle aynı değişkeni iki kez tanımlayın aynı değeri atadığınız zaman Go Compiler size hata veriyor. Yine aynı şekilde short-hand notation ile değişkenleri fonksiyonların dışında tanımlayamıyorsunuz.
Go, Statik olarak yazılan bir dil olmasına rağmen, beyan ettiğiniz her değişkenin türünü açıkça belirtmenizi gerektirmez.
Başlangıç değeri olan bir değişkeni bildirdiğinizde, Golang otomatik olarak değişkenin türünü sağ taraftaki değerden alır. Bu nedenle, bildirim sırasında değişkeni başlatırken türü belirtmeniz gerekmez.
Çoklu değişken tanımlamaları
var (
x int
b bool
)
var (
firtname , lastname string
age int8
)
Ayrıca çoklu değişkeni tek satırdada tanımlayabilirsiniz.
a, b := 20, 16
Zero values
Golang’te tanımladığınız değiikene herhangir bir değer atamazsanız değişken türüne göre boş değer atanacaktır.Aşağıdaki tabloda tipine göre başlayacağı sıfır değerlerini görebilirsiniz.
Type
Zero values
bool
false
string
“”
int, int8, int16 vs.
0
float32, float64
0.0
Değişken Türleri
Go’da değişken tanımlamayı inceledikten sonrada şimdi değişken tiplerimi inceleyelim.
Boolean
Boolean tipi aslında hepimizin aşina olduğu içerisine mantıksal olarka true ve false tutan değişken tipidir.
Sayısal Tipler
Go, int,float gibi diğer programlama dillerinden iyi tanıdğımız değişken tipine sahiptir. Bu tür makineniz için uygun uzunluğa sahiptir, yani 32 bitlik bir makinede 32 bit ve 64 bitlik bir makinede 64 bittir.
Uzunluk hakkında açık olmak istiyorsanız, int32 veya uint32 ile de buna sahip olabilirsiniz. (İmzalı ve imzasız) tamsayıların tam listesi int8, int16, int32, int64 , uint8, uint16, uint32, uint64‘tür.
Ayrıca küsuratlı sayılar için kullanabileceğimiz float32 ve float64 türleride golang’te mevcuttur.
Örneğin kullanıcınızın yaşını tutacaksanız int8 ile daha kısa bi aralık belirleyip belleğinizi daha verimli kullanabilirsiniz.
Not: u ile başlayan veri tipleri bir çok dilden bildiğimiz üzere unsigned(sinyalsiz)’dir yani 0’dan küçük-eksi değer alamaz.
Strings Bir diğer önemli değişken türü ise gene hepimizin aşina olduğu stringlerdir.
s := "Hello World!"
Go’daki string, çift tırnak içine alınmış bir dizi UTF-8 karakteridir (”). Tek tırnak (’) kullanırsanız, bir karakter (UTF-8 ile kodlanmış) anlamına gelir; Bu, Go’da bir string değildir.Yeni başlayanların genellikle en çok hata yaptığı noktadır.O yüzden dikkat etmenizde fayda var.
Bir değişkene string atandıktan sonra içerisinden karakter değiştirilemez
C’den gelen insanlar için; Go’da aşağıdaki işlem hata verecektir.
var s string = "test"
s[0] = 'c' ← Birinci karaktei ’c’ ile değiştir. Fakat bu bir hatadır
Eğer böyle birşey yapma ihtiyacınız varsa aşağıdaki kod’u incelemenizi öneririm.
s := "test"
c := []rune(s)
c[0] = 'c'
s2 := string(c)
fmt.Printf("%s\n", s2)
Şimdi adım adım kod’ta ne yaptığımıza bir bakalım.
İlk Önce rune(Unicode kod noktalarını temsil ederler.) ile string’imizi rune array’ine dönüştürdük.
Daha sonra bu array’in ilk elemanını değiştirdik.(Tek tırnak kullanıldığına dikkat edin.)
Daha sonra rune tipinde değer tutan array’imizi tekrar string’e çevirip ekrana yazdırdık.
Runes
Rune, aslında int32 için bir alias’dır UTF-8 kod noktasıdır.
Rune değişmez değerleri yalnızca 32 bit tam sayı değerleridir (ancak türsüz sabitlerdir, bu nedenle türleri değişebilir). Unicode kod noktalarını temsil ederler. Örneğin, rune değişmez değeri ‘a’ aslında 97 sayısıdır.
fmt.Println([]rune("cafe")) // [99 97 102 233]
Rune tipi ile ilgili ileride daha detaylı yazı hazırlamayı düşünüyorum.Rune türü ile ilgili daha detaylı bilgi için aşağıdaki kaynaklara göz atabilirsiniz