Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array

Sayfayı kopyala
Go'da değişkenler konulu yazımda, "Go'da Veri Tiplerine sonraki yazıda değineceğim" demiştim. İşte bu yazı o "sonraki yazı" :)
Go, statically & strongly typed (statik ve katı tipli) bir dildir. Bu, her değişkenin derleme zamanında (compile-time) tipinin net olması gerektiği ve derleyicinin tip güvenliğini çok sıkı kontrol ettiği anlamına gelir.
💡 Özet (TL;DR):
- Sıfır Değerler (Zero Values): Go'da tanımlanan her değişken varsayılan bir başlangıç değerine (0,
"",falsevb.) sahiptir. Tanımlanmamış veya boş (nil-pointer) hatalarının önüne geçilir.- Katı Tip Güvenliği: Go'da örtük (implicit) tip dönüşümü yoktur.
int32ileint64bile doğrudan toplanamaz, açıkça dönüştürülmelidir.- Temel Yapılar: Nümerik tipler,
string,boolve boyutları sabit olanarray.
Zero Value (Sıfır Değer) Kavramı
Go'da bir değişkeni tanımlayıp ona bir başlangıç değeri vermediğinizde, derleyici ona otomatik olarak o tipin zero value (sıfır değer) değerini atar. Bu, bellekte rastgele verilerin kalmasını ve çökme (crash) hatalarını engelleyen harika bir özelliktir.
var a int // Varsayılan değeri: 0
var b string // Varsayılan değeri: "" (boş string)
var c bool // Varsayılan değeri: false
var d [3]int // Varsayılan değeri: [0, 0, 0]
Explicit Type Conversion (Açık Tip Dönüşümü)
Go, PHP veya JavaScript gibi arka planda otomatik tip dönüştürmesi (implicit type casting) yapmaz. Kodun okunabilir ve hatasız olması için her dönüşümün açıkça belirtilmesi gerekir:
package main
import "fmt"
func main() {
var sayi32 int32 = 10
var sayi64 int64 = 20
// Hatalı kullanım: sayi32 + sayi64 (Derleyici hata verir!)
// Doğru kullanım:
toplam := int64(sayi32) + sayi64
fmt.Println(toplam)
}
String
Go'da string tanımlamak için string anahtar kelimesi kullanılır. Çift tırnak (") veya backtick (`) işaretleri içinde tanımlanırlar. Tek tırnak (') ise karakterleri (rune) tanımlamak için kullanılır.
Kaçış karakterleri (escape sequences):
\nyeni satır (new line)\tsekme (tab)\"çift tırnak (double quote)\\ters eğik çizgi (backslash)
Integer (Tam Sayılar)
Go, işaretli (signed - eksi değer alabilen) ve işaretsiz (unsigned - sadece artı değer alabilen) integer tiplerini destekler.
- Signed (İşaretli):
int8,int16,int32,int64 - Unsigned (İşaretsiz):
uint8,uint16,uint32,uint64 - Mimariler:
intveuinttipleri de kullanılabilir. Bunların boyutları (32-bit veya 64-bit) uygulamanın üzerinde çalıştığı işletim sistemi mimarisine göre otomatik belirlenir.
var sayi8 int8 = 127
var sayi16 int16 = 32767
var sayi32 int32 = 2147483647
var sayi64 int64 = 9223372036854775807
Floating-Point (Ondalık Sayılar)
Go'da float32 (6 basamağa kadar kesinlik) ve float64 (15 basamağa kadar kesinlik) tipleri desteklenir.
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("En büyük Int32 : ", math.MaxInt32)
fmt.Println("En büyük Float32 : ", math.MaxFloat32)
fmt.Println("En büyük Int64 : ", math.MaxInt64)
fmt.Println("En büyük Float64 : ", math.MaxFloat64)
}
Çıktı:
En büyük Int32 : 2147483647
En büyük Float32 : 3.4028234663852886e+38
En büyük Int64 : 9223372036854775807
En büyük Float64 : 1.7976931348623157e+308
Complex & Boolean
- Complex: Karmaşık matematiksel hesaplamalar için
complex64vecomplex128tipleri sunulur. - Boolean: Mantıksal ifadeler için
bool(trueveyafalse) kullanılır. Diğer dillerin aksinebooldeğerleri0veya1sayısal değerlerine örtük olarak dönüştürülemez.
Array (Diziler)
Array, boyutu en baştan belirlenen sabit bir veri grubudur. Array boyutu o veri tipinin bir parçasıdır. Bu yüzden [3]int ile [5]int Go derleyicisi için tamamen farklı iki veri tipidir.
myArray := [3]string{"Ayşe", "Fatma", "Hayriye"}
Uzunluğu Belirsiz Diziler (Ellipsis)
Dizi boyutunu açıkça belirtmek yerine üç nokta (...) kullanarak Go'nun eleman sayısına göre boyutu otomatik atamasını sağlayabilirsiniz:
numbers := [...]int{1, 2, 3} // Dizi boyutu otomatik olarak 3 belirlenir.
Array vs Slice Karşılaştırması
| Özellik | Array (Dizi) | Slice (Dilim) |
|---|---|---|
| Boyut Yapısı | Sabittir (Static), sonradan değiştirilemez. | Dinamiktir (Dynamic), boyutu büyüyebilir. |
| Veri Tipi | Boyut veri tipine dahildir ([3]int). | Boyut veri tipine dahil değildir ([]int). |
| Bellek Yönetimi | Değer tipidir (Value type). Kopyalanarak aktarılır. | Referans yapısındadır. Pointer barındırır. |
| Kullanım | Nadiren, boyutun kesinleştiği durumlarda. | Go'da neredeyse her zaman listeler için. |
Sıkça Sorulan Sorular (FAQ)
Go'daki rune ve byte nedir?
byte: Aslındauint8tipinin bir takma adıdır (alias). 8-bitlik ham ASCII veya byte verilerini ifade etmek için kullanılır.rune: Aslındaint32tipinin bir takma adıdır (alias). UTF-8 formatındaki tek bir Unicode karakterini (code point) temsil eder. JavaScript veya C#'tan farklı olarak Go'dacharveri tipi yoktur, onun yerinerunekullanılır.
Neden Go'da örtük (implicit) tip dönüşümü yasaktır?
Bu tamamen dilin performansı ve güvenirliği ile ilgili bir tasarım kararıdır. Geliştiricinin farkında olmadan veri hassasiyeti (kesinlik) kaybetmesini (örneğin float64 bir değerin sessizce int32'ye yuvarlanmasını veya taşmasını) engeller.
Bir sonraki yazıda Go'da Slice'lardan bahsedeceğiz.
