Kurzusok
/
Go
Go
/
Tanterv
/
Típusállítás
Tí

Típusállítás ebben a kurzusban: Go

1 feladat

A(z) Típusállítás fogalomról

A Go interface-ei kétértelművé tehetik a mögöttes típust. Sőt, az üres interface bármilyen konkrét értéket felvehet (a primitív típusokat is beleértve). A típusállítás segítségével kinyerhetjük az interface-érték mögöttes konkrét értékét ezzel a szintaxissal: interfaceVariable.(concreteType).

Ha ennek az utasításnak az eredményét egyetlen értékhez rendeljük, azzal azt állítjuk, hogy az interface-változó a megadott konkrét típusú értéket tartalmazza. Ezért futásidőben pánikot okozhat, ha az interface-érték nem a megadott konkrét típusba tartozik. Például:

var input interface{} = 12
str := input.(string) // panic at runtime since input is not a string!

Kipróbálhatjuk, hogy egy interface-érték egy adott konkrét típust tartalmaz-e, ha a típusállítás mindkét visszatérési értékét felhasználjuk: a mögöttes értéket és egy Boolean értéket, amely megmondja, hogy az állítás sikeres volt-e. Például:

str, ok := input.(string) // no panic if input is not a string

Ha az input egy string-et tartalmaz, akkor a str lesz a mögöttes érték, az ok pedig igaz lesz. Ha az input nem string-et tartalmaz, akkor a str a string típus nullaértéke lesz (azaz "", az üres string), az ok pedig hamis. Egyik esetben sem történik pánik.

Gyakran találkozni ezzel az idiómával:

str, ok := input.(string)
if !ok {
    str = "a default value"
}

Típus-switchek

Egy típus-switch több típusállítást is elvégezhet egymás után. Ugyanaz a szintaxisa, mint a típusállításnak (interfaceVariable.(concreteType)), de egy konkrét concreteType helyett a type kulcsszót használja. Íme egy példa:

var i interface{} = 12 // try: 12.3, true, int64(12), []int{}, map[string]int{}

switch v := i.(type) {
case int:
    fmt.Printf("the integer %d\n", v)
case string:
    fmt.Printf("the string %s\n", v)
default:
    fmt.Printf("type, %T, not handled explicitly: %#v\n", v, v)
}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Típusállítás fogalmat