Sobes.tech
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")
	}
}