Go'da interface{} ile Tür Dönüşüm Hataları Nasıl Çözülür?
# Go'da interface{} ile Tür Dönüşüm Hataları Nasıl Çözülür?
Go'da `interface{}` (boş interface) her türü kabul eder. Ama içindeki değeri kullanmak istediğinde tür bilgisi kaybolmuş olur. Yanlış dönüşüm denemesi programı çökertir. Bu yazıda güvenli yolları göreceğiz.
Bir fonksiyon `interface{}`'e bir değer koydu. Çıkardığında ne tür olduğunu nasıl bileceksin?
1package main23import "fmt"45func main() {6var data interface{} = 4278// Doğrudan kullanamıyorsun9// result:= data + 10 // HATA: interface{} + int tanımsız1011fmt.Println(data)12}Değerin hangi tür olduğunu biliyorsan, doğrudan dönüştür:
1package main23import "fmt"45func main() {6var data interface{} = 4278// Tür iddiası9num:= data.(int)10fmt.Println(num + 10) // 5211}Çıktı: `52`
Ama yanlış tür tahmin edersen program çöker. Güvenli yol:
1package main23import "fmt"45func main() {6var data interface{} = "merhaba"78// İkinci return değeri kontrolü9num, ok:= data.(int)10if ok {11fmt.Println("Sayı:", num)12} else {13fmt.Println("Bu bir sayı değil")14}15}Çıktı: `Bu bir sayı değil`
Birden fazla türü kontrol etmek istiyorsan:
1package main23import "fmt"45func İşle(data interface{}) {6switch v:= data.(type) {7case int:8fmt.Println("Tamsayı:", v*2)9case string:10fmt.Println("Yazı:", v+"!")11case float64:12fmt.Println("Ondalık:", v/2)13default:14fmt.Println("Bilinmeyen tür")15}16}1718func main() {19İşle(100)20İşle("Go")21İşle(3.14)22}Çıktı:
1Tamsayı: 2002Yazı: Go!3Ondalık: 1.57JSON parse ettiğinde `interface{}`'e çıkan değerleri hep `ok` kontrolüyle dönüştür. Kullanıcı girdisi veya API cevaplarında tür güvenliğini asla ihmal etme. Böylece beklenmedik tür geldiğinde programın nasıl davranacağını kontrol edersin.
0 yorum