- 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}