Sobes.tech
Middle

Go'da boş interfeys niyə hər hansı bir növə çevrilə bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Boş interfeys interface{} metodlar daxil etmir. Go'da hər hansı bir növ, metod tələb etməyən interfeysi təmin edə bilər. Buna görə də, hər hansı bir növün dəyəri interface{} tipində dəyişənə təyin oluna və ya interface{} qəbul edən funksiyaya ötürülə bilər. Əsasən, interface{} hər hansı bir növün dəyəri üçün konteynerdir və həm dəyəri, həm də onun növünü saxlayır.

package main

import "fmt"

func main() {
	var i interface{} // Boş interfeys dəyişəni elan edirik

	i = 42            // int dəyərini təyin edirik
	fmt.Printf("Dəyər: %v, Növ: %T\n", i, i)

	i = "salam"     // string dəyərini təyin edirik
	fmt.Printf("Dəyər: %v, Növ: %T\n", i, i)

	i = true        // bool dəyərini təyin edirik
	fmt.Printf("Dəyər: %v, Növ: %T\n", i, i)

	i = struct{}{}  // boş struktur təyin edirik
	fmt.Printf("Dəyər: %v, Növ: %T\n", i, i)
}

interface{}-dən konkret növə çevirmək üçün tip iddiası (type assertion) və ya tip switch istifadə olunur.

package main

import "fmt"

func main() {
	var i interface{} = "dünya"

	// Tip iddiası
	s, ok := i.(string) // dəyərin string olub olmadığını yoxlayır
	if ok {
		fmt.Println("Tip iddiası uğurlu:", s)
	} else {
		fmt.Println("Tip iddiası uğursuz")
	}

	// Tip switch
	switch v := i.(type) {
	case int:
		fmt.Println("Tip int, dəyər:", v)
	case string:
		fmt.Println("Tip string, dəyər:", v)
	default:
		fmt.Println("Naməlum tip")
	}
}