Middle
Чаро интерфейси холӣ дар Go метавонанд ба ҳар гуна навъ табдил ёбанд?
sobes.tech AI
Ҷавоб аз AI
Бос интерфейс interface{} методҳоро дар бар намегирад. Ҳар гуна навъи дар Go метавонад ба интерфейси, ки талаб намекунад, ҷавобгӯ бошад. Аз ин рӯ, арзиши ҳар гуна навъ метавонад ба тағйирёбандаи навъи interface{} таъин карда шавад ё ба функсияе, ки interface{} қабул мекунад, гузошта шавад. Дар асос, interface{} як контейнер барои арзиши ҳар гуна навъ аст, ки ҳам арзиш ва ҳам навъи онро нигоҳ медорад.
package main
import "fmt"
func main() {
var i interface{} // Декларацияи тағйирёбандаи интерфейси холӣ
i = 42 // таъин кардани int
fmt.Printf("Арзиш: %v, Навъ: %T\n", i, i)
i = "салом" // таъин кардани string
fmt.Printf("Арзиш: %v, Навъ: %T\n", i, i)
i = true // таъин кардани bool
fmt.Printf("Арзиш: %v, Навъ: %T\n", i, i)
i = struct{}{} // таъин кардани структураи холӣ
fmt.Printf("Арзиш: %v, Навъ: %T\n", i, i)
}
Тавре ки аз interface{} ба навъи мушаххас гузариш кардан мумкин аст, бо истифода аз тасдиқи навъ (type assertion) ё switch-и навъ (type switch).
package main
import "fmt"
func main() {
var i interface{} = "ҷаҳон"
// Тасдиқи навъ
s, ok := i.(string) // санҷиш, ки арзиш string аст
if ok {
fmt.Println("Тасдиқи навъ муваффақ:", s)
} else {
fmt.Println("Тасдиқи навъ ноком")
}
// Switch-и навъ
switch v := i.(type) {
case int:
fmt.Println("Навъ: int, арзиш:", v)
case string:
fmt.Println("Навъ: string, арзиш:", v)
default:
fmt.Println("Навъи ношинос")
}
}