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

> Go programlama dilinin güçlü ve statik veri tiplerini, sıfır değerler (zero values) mantığını ve açık tip dönüşümlerini öğrenin.

[Go'da değişkenler](/tr/go-ve-degiskenler) 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, `""`, `false` vb.) 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. `int32` ile `int64` bile doğrudan toplanamaz, açıkça dönüştürülmelidir.
> - **Temel Yapılar:** Nümerik tipler, `string`, `bool` ve boyutları sabit olan `array`.

---

## 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.

```go
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:

```go
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):
- `\n` yeni satır (new line)
- `\t` sekme (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:** `int` ve `uint` tipleri de kullanılabilir. Bunların boyutları (32-bit veya 64-bit) uygulamanın üzerinde çalıştığı işletim sistemi mimarisine göre otomatik belirlenir.

```go
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.

```go
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ı:**
```text
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 `complex64` ve `complex128` tipleri sunulur.
- **Boolean:** Mantıksal ifadeler için `bool` (`true` veya `false`) kullanılır. Diğer dillerin aksine `bool` değerleri `0` veya `1` sayı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.

```go
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:

```go
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ında `uint8` tipinin bir takma adıdır (alias). 8-bitlik ham ASCII veya byte verilerini ifade etmek için kullanılır.
- **`rune`:** Aslında `int32` tipinin 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'da `char` veri tipi yoktur, onun yerine `rune` kullanı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](/tr/go-slice-veri-tipi) bahsedeceğiz.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/go-veri-tipleri-string-integer-float-complex-boolean-ve-array
