Frage Golang: Übergibt eine Schnittstelle dynamisch an eine typisierte Variable


In Go, ist es möglich, Variablen dynamisch irgendwie zu werfen?

Zum Beispiel, wenn eine einfache Besetzung wäre:

var intAge  = interfaceAge.(int)

Was, wenn ich nicht weiß, dass das Alter im Voraus ist? Eine einfache Art zu schreiben wäre es

var x = getType()
var someTypeAge = interfaceAge(.x)

Gibt es eine Möglichkeit, so etwas zu erreichen? Das reflect-Paket bietet einige Möglichkeiten, einen Typ zur Laufzeit zu bestimmen oder zu transformieren - aber ich konnte nichts Ähnliches wie oben erwähnt finden (ein generisches Schema, das für alle Typen funktionieren würde).


11
2018-01-15 19:55


Ursprung


Antworten:


Nein, du kannst nicht. Go ist eine statische typisierte Sprache. Der Typ einer Variablen wird zur Kompilierzeit bestimmt.

Wenn Sie das dynamisch bestimmen wollen typeeines interface{} Du könntest benutzen Typumschaltung:

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has
case bool:
    fmt.Printf("boolean %t\n", t)             // t has type bool
case int:
    fmt.Printf("integer %d\n", t)             // t has type int
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int
}

4
2018-01-15 20:17