Middle
Go'da boş arayüz neden herhangi bir türe dönüştürülebilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Boş arayüz interface{} metod içermez. Go'daki herhangi bir tip, metod gerektirmeyen bir arayüzü karşılayabilir. Bu nedenle, herhangi bir tipin değeri interface{} türündeki bir değişkene atanabilir veya interface{} kabul eden bir fonksiyona geçirilebilir. Özünde, interface{} herhangi bir tipteki değeri tutan bir konteynerdir ve hem değeri hem de onun tipini saklar.
package main
import "fmt"
func main() {
var i interface{} // Boş arayüz değişkeni tanımlıyoruz
i = 42 // int atıyoruz
fmt.Printf("Değer: %v, Tip: %T\n", i, i)
i = "merhaba" // string atıyoruz
fmt.Printf("Değer: %v, Tip: %T\n", i, i)
i = true // bool atıyoruz
fmt.Printf("Değer: %v, Tip: %T\n", i, i)
i = struct{}{} // boş yapı atıyoruz
fmt.Printf("Değer: %v, Tip: %T\n", i, i)
}
interface{}'den belirli bir tipe dönüşüm, tip iddiası (type assertion) veya tip switch kullanılarak mümkündür.
package main
import "fmt"
func main() {
var i interface{} = "dünya"
// Tip iddiası
s, ok := i.(string) // değerin string olup olmadığını kontrol eder
if ok {
fmt.Println("Tip iddiası başarılı:", s)
} else {
fmt.Println("Tip iddiası başarısız")
}
// Tip switch
switch v := i.(type) {
case int:
fmt.Println("Tip int, değer:", v)
case string:
fmt.Println("Tip string, değer:", v)
default:
fmt.Println("Bilinmeyen tip")
}
}