Maison  >  Article  >  développement back-end  >  Comment corriger l'erreur Golang : impossible d'utiliser 'x' (type T) comme type U dans l'argument pour fonctionner

Comment corriger l'erreur Golang : impossible d'utiliser 'x' (type T) comme type U dans l'argument pour fonctionner

PHPz
PHPzoriginal
2023-08-21 22:21:27953parcourir

如何修复golang报错:cannot use 'x' (type T) as type U in argument to function

Comment corriger l'erreur Golang : impossible d'utiliser 'x' (type T) comme type U dans l'argument de la fonction

Lors de l'écriture de code dans Go, vous rencontrerez parfois "impossible d'utiliser 'x' (type T) comme type U en argument pour fonctionner" telle erreur de compilation. Cette erreur se produit car lors d'un appel de fonction, le type de paramètre passé ne correspond pas au type de paramètre déclaré par la fonction. Cet article décrira quelques situations courantes et comment corriger cette erreur.

  1. Types de données de base incompatibles
    Cette erreur se produit lorsque le type de paramètre transmis est incohérent avec le type de paramètre déclaré par la fonction. Par exemple, lorsqu'une fonction attend un paramètre de type int, mais que vous transmettez un paramètre de type string, une erreur sera signalée.

Ce qui suit est un exemple de code :

package main

import "fmt"

func printNumber(num int) {
    fmt.Println(num)
}

func main() {
    var str string = "123"
    printNumber(str)  // 报错:"cannot use 'str' (type string) as type int in argument to printNumber"
}

Dans le code ci-dessus, la fonction printNumber s'attend à recevoir un paramètre de type int, mais une chaîne est passée dans le main code> fonction Paramètres de type. Pour corriger cette erreur, nous devons nous assurer que les types de paramètres passés correspondent aux types de paramètres déclarés par la fonction. <code>printNumber期望接收一个int类型的参数,但在main函数中传递了一个string类型的参数。为了修复这个错误,我们需要确保传递的参数类型与函数声明的参数类型相匹配。

修复方法1:将参数类型转换为函数期望的类型。比如使用strconv.Atoi函数将字符串转换为整数。

package main

import (
    "fmt"
    "strconv"
)

func printNumber(num int) {
    fmt.Println(num)
}

func main() {
    var str string = "123"
    num, err := strconv.Atoi(str)
    if err != nil {
        fmt.Println(err)
        return
    }
    printNumber(num)
}

修复方法2:如果确定字符串中的内容可以转换为整数,可以直接使用strconv.Atoi函数进行转换,并将结果直接传递给函数。

package main

import (
    "fmt"
    "strconv"
)

func printNumber(num int) {
    fmt.Println(num)
}

func main() {
    var str string = "123"
    num, _ := strconv.Atoi(str)
    printNumber(num)
}
  1. 自定义类型不匹配
    当自定义类型与所需的参数类型不匹配时,也会报错。例如,当一个函数期望接收一个User类型的参数,但你却传递了一个Admin类型的参数时,也会出现此错误。

下面是一个示例代码:

package main

import "fmt"

type User struct {
    Name string
    Age  int
}

func printUserInfo(user User) {
    fmt.Printf("Name: %v, Age: %v
", user.Name, user.Age)
}

type Admin struct {
    User
    Role string
}

func main() {
    admin := Admin{
        User: User{Name: "Tom", Age: 32},
        Role: "Administrator",
    }
    printUserInfo(admin)  // 报错:"cannot use 'admin' (type Admin) as type User in argument to printUserInfo"
}

上面的代码中,printUserInfo函数期望接收一个User类型的参数,但在main函数中传递了一个Admin类型的参数。为了修复这个错误,我们需要确保传递的参数类型与函数声明的参数类型相匹配。

修复方法:可以使用Admin类型中的User

Fix 1 : Convertissez le type de paramètre en type attendu par la fonction. Par exemple, utilisez la fonction strconv.Atoi pour convertir une chaîne en entier.

package main

import "fmt"

type User struct {
    Name string
    Age  int
}

func printUserInfo(user User) {
    fmt.Printf("Name: %v, Age: %v
", user.Name, user.Age)
}

type Admin struct {
    User
    Role string
}

func main() {
    admin := Admin{
        User: User{Name: "Tom", Age: 32},
        Role: "Administrator",
    }
    printUserInfo(admin.User)
}

Fix 2 : Si vous êtes sûr que le contenu de la chaîne peut être converti en entier, vous pouvez directement utiliser la fonction strconv.Atoi pour convertir et transmettre le résultat directement à la fonction. 🎜rrreee
    🎜Incompatibilité de type personnalisé🎜Lorsque le type personnalisé ne correspond pas au type de paramètre requis, une erreur sera également signalée. Par exemple, cette erreur se produit également lorsqu'une fonction attend un paramètre de type Utilisateur, mais que vous transmettez un paramètre de type Admin. 🎜🎜🎜Ce qui suit est un exemple de code : 🎜rrreee🎜Dans le code ci-dessus, la fonction printUserInfo s'attend à recevoir un paramètre de type User, mais dans main Un paramètre de type Admin est passé dans la fonction. Pour corriger cette erreur, nous devons nous assurer que les types de paramètres passés correspondent aux types de paramètres déclarés par la fonction. 🎜🎜Correction : Vous pouvez utiliser le champ Utilisateur dans le type Admin comme paramètre de fonction. 🎜rrreee🎜En utilisant la méthode ci-dessus, vous pouvez corriger l'erreur "Impossible d'utiliser 'x' (type T) comme type U dans l'argument de la fonction" rencontrée lors de la programmation dans Go. Ces méthodes garantissent que les types de paramètres transmis correspondent aux types de paramètres déclarés par la fonction, afin que le code soit compilé et exécuté correctement. 🎜

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