Maison > développement back-end > Golang > Comment puis-je découvrir les types de packages de manière dynamique dans Go ?

Comment puis-je découvrir les types de packages de manière dynamique dans Go ?

DDD
Libérer: 2024-12-15 12:51:24
original
722 Les gens l'ont consulté

How Can I Discover Package Types Dynamically in Go?

Recherche dynamique des types de packages

Malgré l'absence de mécanismes de découverte de types dans le package Reflect, d'autres méthodes existent pour découvrir les types exportés, en particulier les structures , au moment de l'exécution.

Go 1.5 et Plus tard

Dans Go 1.5 et versions ultérieures, les types et les packages d'importation peuvent vous aider dans cette tâche. L'extrait de code suivant illustre le processus :

package main

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("time")
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}
Copier après la connexion

Versions pré-1.5

Avant Go 1.5, le package ast fournit la seule approche non hackée à ce problème. . En compilant le code source, ce package peut extraire des informations de type :

package main

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
)

func main() {
    fset := token.NewFileSet()
    node, err := parser.ParseFile(fset, "time.go", nil, parser.ParseComments)
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    ast.Inspect(node, func(n ast.Node) bool {
        if n, ok := n.(*ast.TypeSpec); ok {
            fmt.Println(n.Name.Name)
        }
        return true
    })
}
Copier après la connexion

Ces techniques permettent la découverte de types exportés, en particulier les structures, dans les packages Go en cours d'exécution, permettant une analyse plus approfondie et une instanciation des instances.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal