Ich habe keine gute Ressource für die Verwendung von interface{}
Typen gefunden. Beispielsweise
package main
import "fmt"
func weirdFunc(i int) interface{} {
if i == 0 {
return "zero"
}
return i
}
func main() {
var i = 5
var w = weirdFunc(5)
// this example works!
if tmp, ok := w.(int); ok {
i += tmp
}
fmt.Println("i =", i)
}
Kennen Sie eine gute Einführung in die Verwendung von Go's? interface{}
?
spezifische Fragen:
- Wie bekomme ich den "echten" Typ von w?
- Gibt es eine Möglichkeit, die Zeichenfolgendarstellung eines Typs abzurufen?
- Gibt es eine Möglichkeit, die Zeichenfolgendarstellung eines Typs zum Konvertieren eines Werts zu verwenden?
types
type-conversion
go
cc jung
quelle
quelle
reflect.TypeOf
.Sie können auch Typschalter ausführen:
quelle
Sie können Reflection (
reflect.TypeOf()
) verwenden, um den Typ von etwas abzurufen, und der darin angegebene Wert (Type
) enthält eine Zeichenfolgendarstellung (String
Methode), die Sie drucken können.quelle
fmt
das "% T" -Format verwenden, anstatt es direkt zu verwendenreflect
.Hier ist ein Beispiel für das Dekodieren einer generischen Karte mit Schalter und Reflexion. Wenn Sie also nicht mit dem Typ übereinstimmen, verwenden Sie Reflexion, um dies herauszufinden, und fügen Sie den Typ beim nächsten Mal hinzu.
quelle
Typschalter können auch mit Reflexionsmaterial verwendet werden:
quelle
Ich werde eine Möglichkeit anbieten, einen Booleschen Wert zurückzugeben, indem ein Argument eines Reflection Kinds an einen lokalen Typempfänger übergeben wird (weil ich so etwas nicht finden konnte).
Zuerst deklarieren wir unseren anonymen Typ vom Typ Reflect.Value:
Dann fügen wir einen Builder für unseren lokalen Typ AnonymousType hinzu, der jeden möglichen Typ (als Schnittstelle) aufnehmen kann:
Dann fügen wir eine Funktion für unsere AnonymousType-Struktur hinzu, die gegen ein Reflect behauptet. Art:
Dies ermöglicht es uns, Folgendes aufzurufen:
Eine längere, funktionierende Version finden Sie hier: https://play.golang.org/p/EIAp0z62B7
quelle
Es gibt mehrere Möglichkeiten, eine Zeichenfolgendarstellung eines Typs abzurufen. Schalter können auch mit Benutzertypen verwendet werden:
Link zu einem Spielplatz: https://play.golang.org/p/VDeNDUd9uK6
quelle