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>
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>
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!