Invocation dynamique de méthodes sur les valeurs d'interface
Dans Go, l'appel dynamique de méthodes sur des objets peut être difficile lorsqu'il s'agit de valeurs d'interface{}. Ce problème survient lorsque le type sous-jacent de l'interface n'est pas explicitement connu.
Dans l'exemple de code fourni, la fonction Pass() ne parvient pas à invoquer la méthode Finish() sur un objet de type Test lorsque l'objet est intégré dans une valeur d'interface{}. En effet, l'API de réflexion ne peut pas accéder directement à l'adresse de l'objet lorsqu'il est référencé en tant qu'interface{}.
Pour résoudre ce problème, nous devons considérer le type de valeur sous-jacent de l'interface. De plus, comme les méthodes peuvent être implémentées avec des récepteurs de valeur ou de pointeur, nous devons gérer les deux cas de manière dynamique.
En utilisant la réflexion, nous pouvons obtenir la valeur sous-jacente de l'interface (valeur) et créer un pointeur vers celle-ci ( ptr). Ensuite, nous pouvons vérifier l'existence de la méthode sur les types valeur et pointeur.
La fonction CallMethod() modifiée gère efficacement ces scénarios :
Cette solution nous permet d'invoquer dynamiquement des méthodes sur des objets , quelle que soit leur valeur sous-jacente ou leur type de récepteur, en travaillant avec les types valeur et pointeur.
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!