Je n'ai pas trouvé de bonne ressource pour utiliser les interface{}
types. Par exemple
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)
}
Connaissez-vous une bonne introduction à l'utilisation de Go interface{}
?
questions spécifiques:
- comment obtenir le "vrai" type de w?
- existe-t-il un moyen d'obtenir la représentation sous forme de chaîne d'un type?
- existe-t-il un moyen d'utiliser la représentation sous forme de chaîne d'un type pour convertir une valeur?
types
type-conversion
go
cc jeune
la source
la source
reflect.TypeOf
.Vous pouvez également faire des commutateurs de type:
la source
Vous pouvez utiliser Reflection (
reflect.TypeOf()
) pour obtenir le type de quelque chose, et la valeur qu'il donne (Type
) a une représentation sous forme de chaîne (String
méthode) que vous pouvez imprimer.la source
fmt
le format "% T" au lieu d'utiliser directementreflect
.Voici un exemple de décodage d'une carte générique en utilisant à la fois le commutateur et la réflexion, donc si vous ne correspondez pas au type, utilisez la réflexion pour le comprendre, puis ajoutez le type la prochaine fois.
la source
Les commutateurs de type peuvent également être utilisés avec des éléments de réflexion:
la source
Je vais proposer un moyen de renvoyer un booléen basé sur le passage d'un argument d'une réflexion Kinds à un récepteur de type local (car je n'ai rien trouvé de tel).
Tout d'abord, nous déclarons notre type anonyme de type reflect.Value:
Ensuite, nous ajoutons un générateur pour notre type local AnonymousType qui peut prendre n'importe quel type potentiel (en tant qu'interface):
Ensuite, nous ajoutons une fonction pour notre structure AnonymousType qui affirme contre un reflect.Kind:
Cela nous permet d'appeler ce qui suit:
Vous pouvez voir une version plus longue et fonctionnelle ici: https://play.golang.org/p/EIAp0z62B7
la source
Il existe plusieurs façons d'obtenir une représentation sous forme de chaîne d'un type. Les commutateurs peuvent également être utilisés avec les types d'utilisateurs:
Lien vers une aire de jeux: https://play.golang.org/p/VDeNDUd9uK6
la source