Middle
Kāpēc tukšā interfeisa Go var pārvērst jebkurā tipā?
sobes.tech AI
Atbilde no AI
Tukša saskarne interface{} nesatur metodes. Jebkurš tips Go var būt apmierinošs ar jebkuru metodi nepieprasošu saskarni. Tādēļ jebkura tipa vērtība var tikt piešķirta interface{} tipa mainīgajam vai nodota funkcijai, kas pieņem interface{}. Pamatā, interface{} ir konteineris jebkura tipa vērtībai, kas glabā gan vērtību, gan tās tipu.
package main
import "fmt"
func main() {
var i interface{} // Deklarējam tukšu saskarni
i = 42 // Piešķiram int
fmt.Printf("Vērtība: %v, Tips: %T\n", i, i)
i = "sveiki" // Piešķiram string
fmt.Printf("Vērtība: %v, Tips: %T\n", i, i)
i = true // Piešķiram bool
fmt.Printf("Vērtība: %v, Tips: %T\n", i, i)
i = struct{}{} // Piešķiram tukšu struktūru
fmt.Printf("Vērtība: %v, Tips: %T\n", i, i)
}
Konvertēt no interface{} uz konkrētu tipu ir iespējams ar tipu apgalvojumu (type assertion) vai tipu pārslēgšanu (type switch).
package main
import "fmt"
func main() {
var i interface{} = "pasaule"
// Tipa apgalvojums
s, ok := i.(string) // pārbauda, vai vērtība ir string
if ok {
fmt.Println("Veiksmīgs tipa apgalvojums:", s)
} else {
fmt.Println("Tipa apgalvojums neizdevās")
}
// Tipu pārslēgšana
switch v := i.(type) {
case int:
fmt.Println("Tips ir int, vērtība:", v)
case string:
fmt.Println("Tips ir string, vērtība:", v)
default:
fmt.Println("Nezināms tips")
}
}