Generics: Go 1.18+ İle Gelen Genel Tipler Rehberi

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18

Kopyala-Yapıştır Kodun Sonu​

Go 1.18 sürümüne kadar (yaklaşık 10 yıl boyunca), Go geliştiricilerinin en büyük şikayeti "Generics" olmamasıydı.Örneğin; iki int sayıyı toplayan bir fonksiyonunuz var. İki float sayıyı toplamak için aynı fonksiyonu kopyalayıp parametre tiplerini değiştirmeniz gerekiyordu.Generics ile artık tipi parametre olarak alabilen fonksiyonlar yazabiliyoruz.

any​

Generics ile birlikte interface{} yerine any anahtar kelimesi geldi. Ayrıca karşılaştırılabilir (==, !=) tipler için comparable kısıtlaması eklendi.

Generics Olmadan Önce (Eski Hal)​

Kod:
func ToplaInt(a, b int) int {return a + b}

func ToplaFloat(a, b float64) float64 {return a + b}

Generics İle (Yeni Hal)​

Fonksiyon isminden sonra köşeli parantez [...] içinde tip parametresi tanımlanır.

Kod:
package main

import "fmt"

// T tipi, hem int hem float64 olabilir (Constraint)// Buna "Type Constraint" denir.func Topla[T int | float64](a, b T) T {return a + b}

// "comparable": Go'nun ön tanımlı kısıtlamasıdır.// Sadece eşitliği kontrol edilebilen (string, int, bool vb.) tipleri kabul eder.// Slice veya Map "comparable" değildir.func ListedeVarMi[T comparable](liste []T, aranan T) bool {for _, eleman := range liste {if eleman == aranan {return true}}return false}

func main() {// 1. Sayı Toplamafmt.Println("Int Toplam:", Topla(5, 10))fmt.Println("Float Toplam:", Topla(5.5, 4.2))

// 2. Arama Yapma<br>isimler := []string{"Ali", "Veli", "Ayşe"}<br>sayilar := []int{10, 20, 30}<br><br>fmt.Println("Ali var mı?", ListedeVarMi(isimler, "Ali"))<br>fmt.Println("50 var mı?", ListedeVarMi(sayilar, 50))<br>
}

Kendi Kısıtlamanızı (Constraint) Yazmak​

Sürekli int | float64 | float32 yazmak yerine bunu bir interface olarak tanımlayabilirsiniz.

Kod:
type Sayi interface {int | int64 | float32 | float64}

func Carpma[T Sayi](a, b T) T {return a * b}

Sonuç​

Generics, Go'nun sadeliğini bozmadan, "Type Safety" (Tip Güvenliği) sağlayarak kod tekrarını önleyen devrimsel bir özelliktir. Artık interface{} kullanıp çalışma zamanında (runtime) tip dönüşümü hataları almak yerine, derleme zamanında (compile time) güvenli genel fonksiyonlar yazabilirsiniz.
 
Geri
Üst