Vérification de type dynamique dans Go à l'aide du commutateur de type
Dans Go, la vérification de type est généralement effectuée de manière statique au moment de la compilation. Cependant, dans certains scénarios, comme l'exposition de fonctions C avec différents types de paramètres, il devient important de vérifier les types de variables au moment de l'exécution.
Pour répondre à ce besoin, Go fournit une instruction de type switch qui nous permet de déterminer le type d'une valeur d'interface de manière dynamique. Illustrons comment cela peut être utilisé pour implémenter une fonction qui accepte des paramètres de différents types.
Supposons que nous ayons deux fonctions C :
CURLcode curl_wrapper_easy_setopt_long(CURL* curl, CURLoption option, long param); CURLcode curl_wrapper_easy_setopt_str(CURL* curl, CURLoption option, char* param);
Nous voulons exposer ces fonctions comme un seul Go fonction avec la signature suivante :
func (e *Easy)SetOption(option Option, param interface{})
Cela nous oblige à vérifier le type de paramètre au moment de l'exécution pour déterminer la fonction C appropriée à appeler. Nous pouvons y parvenir en utilisant un commutateur de type :
func (e *Easy)SetOption(option Option, param interface{}) { switch v := param.(type) { default: fmt.Printf("unexpected type %T", v) case uint64: e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(v))) case string: e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(v))) } }
Dans ce commutateur de type, le paramètre de valeur interface{} est affecté à une nouvelle variable v avec le mot-clé type. Les cas dans l'instruction switch représentent les types de paramètres attendus. Si le type du paramètre correspond à l'un des cas, le bloc de code correspondant est exécuté. Dans ce cas, nous appelons la fonction C appropriée en fonction du type de paramètre.
Notez que le cas par défaut est utilisé pour gérer les types inattendus et peut être remplacé par un mécanisme de gestion des erreurs, le cas échéant.
En implémentant le changement de type, nous pouvons créer une seule fonction Go capable de gérer des paramètres de différents types, simplifiant ainsi l'API exposée à l'appelant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!