Maison > développement back-end > Golang > le corps du texte

Comment résoudre l'erreur Golang : utilisation non valide de 'x' (type T) comme type U dans l'argument de la fonction

PHPz
Libérer: 2023-08-26 08:30:11
original
911 Les gens l'ont consulté

如何解决golang报错:invalid use of 'x' (type T) as type U in argument to function

Comment résoudre l'erreur Golang : utilisation non valide de 'x' (type T) comme type U dans l'argument de la fonction

Lors de l'écriture de code en Golang, nous rencontrerons parfois des problèmes de non-concordance de types, dont l'un est courant. l'erreur est : "utilisation invalide de 'x' (type T) comme type U dans l'argument de la fonction". Cette erreur se produit généralement lorsque l'on essaie de passer une variable de type T à une fonction dont le paramètre est de type U.

Pour résoudre ce problème, nous devons comprendre les concepts de conversion de type et d'assertion de type.

1. Conversion de type
Dans Golang, un type peut être converti en un autre type via la conversion de type. La syntaxe de conversion de type consiste à mettre le type à convertir devant la valeur à convertir, entre parenthèses, par exemple : U(x).

Voici un exemple de code :

package main

import (
    "fmt"
)

func main() {
    var x int32 = 10
    var y int = int(x) // 将int32类型的x转换为int类型

    fmt.Println(y) // 输出:10
}
Copier après la connexion

Dans cet exemple, nous convertissons la variable x de type int32 en variable y de type int. De cette façon, x peut être transmis à une fonction dont le type de paramètre est int, évitant ainsi les erreurs d'incompatibilité de type.

2. Assertion de type
L'assertion de type est un moyen de déterminer le type réel d'une valeur d'interface au moment de l'exécution. Dans Golang, la syntaxe de l'assertion de type consiste à utiliser .(type), par exemple : val.(int).

Voici un exemple de code :

package main

import (
    "fmt"
)

func main() {
    var val interface{} = 10
    if num, ok := val.(int); ok {
        fmt.Println(num) // 输出:10
    } else {
        fmt.Println("val不是int类型")
    }
}
Copier après la connexion

Dans cet exemple, nous stockons une valeur de type int dans la variable val de type d'interface vide. Utilisez ensuite une assertion de type pour déterminer si le type réel de val est int. Si tel est le cas, convertissez val en type int et affectez-le à la variable num.

En comprenant les concepts de conversion de type et d'assertion de type, nous pouvons mieux résoudre l'erreur « utilisation invalide de 'x' (type T) comme type U dans l'argument de la fonction ». Selon le message d'erreur, nous pouvons déterminer que c'est parce que nous essayons de transmettre une variable de type T à une fonction avec un paramètre de type U, nous pouvons donc essayer d'effectuer une conversion de type ou une assertion de type avant de passer.

Ce qui suit est un exemple de code :

package main

import (
    "fmt"
)

type T struct {
    value int
}

func foo(u struct{}) {
    fmt.Println(u)
}

func main() {
    var t T
    foo(struct{}(t)) // 将T类型的变量t转换为匿名结构体类型,然后传递给函数foo

    u := interface{}(t) // 将T类型的变量t转换为接口类型,然后传递给函数foo
    foo(u)

    fmt.Println("Done")
}
Copier après la connexion

Dans cet exemple, nous définissons un type T et une fonction foo La fonction foo reçoit un paramètre dont le type de paramètre est une structure.

Dans la fonction principale, nous créons une variable t de type T. Ensuite, t est transmis à la fonction foo via la conversion de type et l'assertion de type.

Grâce à cet exemple, nous pouvons constater que nous pouvons utiliser la conversion de type ou l'assertion de type pour résoudre l'erreur "utilisation invalide de 'x' (type T) comme type U dans l'argument de la fonction".

Résumé :
Dans Golang, l'erreur « utilisation non valide de « x » (type T) comme type U dans l'argument de la fonction » est généralement causée par une incompatibilité de type. Nous pouvons résoudre ce problème grâce à la conversion de type et à l’assertion de type. Dans le même temps, nous devons également avoir une certaine compréhension de la syntaxe et des concepts de conversion de type et d'assertion de type dans Golang afin de mieux résoudre ce problème. J'espère que cet article aidera à résoudre ce problème.

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!

Étiquettes associées:
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!