Maison >développement back-end >Golang >Comment puis-je parcourir dynamiquement les méthodes d'un package Go ?

Comment puis-je parcourir dynamiquement les méthodes d'un package Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 16:51:03583parcourir

How can I dynamically iterate through methods in a Go package?

Itération dynamique des packages dans Go

Question :

En tant que débutant dans Go, vous construisez une calculatrice qui prend actuellement en charge l'addition et la soustraction. Vous envisagez des fonctionnalités futures telles que la multiplication et la division. Cependant, vous trouvez que l’approche actuelle dans vos fichiers addition.go et subtraction.go est verbeuse et recherchez une solution plus dynamique. Existe-t-il un moyen de trouver toutes les méthodes dans le package de la calculatrice et de les parcourir de manière dynamique ?

Réponse :

Malheureusement, Go ne fournit pas de mécanisme intégré pour introspecter le contenu des packages et parcourir leurs méthodes de manière dynamique. Le compilateur inclut uniquement les fonctions et variables dans l'exécutable qui sont explicitement référencées. Itérer sur un ensemble de symboles potentiellement incomplet n'est pas considéré comme utile dans Go.

Solution alternative :

Comme alternative à l'itération dynamique, vous pouvez utiliser un tableau pour contenir objets des types sur lesquels vous souhaitez opérer et parcourir ce tableau. Cette approche implique de créer une tranche d'interfaces :

type Calc interface {
    First(x int) int
    Second(x int) int
}

var operations []Calc

Ensuite, vous pouvez ajouter des objets de vos types concrets à la tranche :

operations = append(operations, &calculator.Add{})
operations = append(operations, &calculator.Sub{})

Vous pouvez ensuite parcourir la tranche et appeler méthodes dynamiquement :

for _, operation := range operations {
    fmt.Println(operation.First(x))
    fmt.Println(operation.Second(x))
}

Cette approche offre un moyen flexible de parcourir les opérations de la calculatrice dans votre package sans nécessiter de dynamique introspection.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn