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