Maison > développement back-end > Golang > Comment accéder aux champs d'une structure anonyme passée en interface sans méthode dans Golang ?

Comment accéder aux champs d'une structure anonyme passée en interface sans méthode dans Golang ?

Linda Hamilton
Libérer: 2024-11-04 11:54:01
original
933 Les gens l'ont consulté

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

Interface sans méthodes : accès au type personnalisé dans Golang

Dans Golang, vous pouvez créer des structures anonymes et les transmettre comme arguments aux fonctions qui acceptent un type d'interface. Cependant, si l'interface n'a aucune méthode définie, vous ne pourrez pas accéder directement aux champs de la structure anonyme.

Considérez l'exemple de code suivant :

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>
Copier après la connexion

Dans cet exemple, nous transmettons une structure anonyme comme argument v à NewJob. La fonction Custom récupère la valeur personnalisée associée au nom "pene" et la renvoie sous forme d'interface{}.

Lorsque nous essayons d'accéder au champ Id de la structure anonyme au sein de la goroutine, nous rencontrons l'erreur " t.Id non défini". En effet, le type interface{} n'a pas de méthodes définies, nous ne pouvons donc pas le traiter comme un type concret.

Pour accéder aux champs de la structure anonyme, nous devons taper assert it sur un type compatible . Dans ce cas, nous savons que v contient une structure anonyme avec un champ Id de type int. Nous pouvons taper assert it en utilisant la syntaxe suivante :

<code class="go">id := v.(struct{Id int}).Id</code>
Copier après la connexion

Cela convertira la valeur v de l'interface{} en une structure concrète avec un champ Id, nous permettant d'y accéder directement.

En tapant en affirmant la valeur interface{}, nous pouvons accéder aux champs de la structure anonyme et les utiliser selon nos besoins.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal