Sobes.tech
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("Навъи ношинос")
	}
}