ホームページ  >  記事  >  バックエンド開発  >  golang エラーの修正方法: 関数の引数で 'x' (型 T) を型 U として使用することはできません

golang エラーの修正方法: 関数の引数で 'x' (型 T) を型 U として使用することはできません

PHPz
PHPzオリジナル
2023-08-21 22:21:27953ブラウズ

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

Golang エラーを修正する方法: 関数への引数では 'x' (型 T) を型 U として使用できません

Go でコードを記述するときに、コンパイルが発生することがあります。 「関数の引数では型 U として 'x' (型 T) を使用できません」などのエラー。このエラーは、関数呼び出しで渡されたパラメーターの型が関数で宣言されたパラメーターの型と一致しないために発生します。この記事では、いくつかの一般的な状況とこのエラーの修正方法について説明します。

  1. 基本データ型が一致していません
    このエラーは、渡されたパラメータの型が関数で宣言されたパラメータの型と一致しない場合に発生します。たとえば、関数が int 型のパラメータを予期しているのに、string 型のパラメータを渡すと、エラーが報告されます。

以下はサンプル コードです:

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"
}

上記のコードでは、関数 printNumber は int 型のパラメーターを受け取ることを想定していますが、 main関数には文字列型パラメータが渡されます。このエラーを修正するには、渡されたパラメーターの型が関数で宣言されたパラメーターの型と一致することを確認する必要があります。

修正 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## 型のパラメータを受け取ることを想定しています。 #、ただし、Admin 型のパラメーターが main 関数に渡されます。このエラーを修正するには、渡されたパラメーターの型が関数で宣言されたパラメーターの型と一致することを確認する必要があります。

修正方法:

Admin タイプの User フィールドを関数パラメーターとして使用できます。

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)
}

上記の方法により、Go でのプログラミング中に発生した「関数の引数に型 U として 'x' (型 T) を使用できません」というエラーを修正できます。これらのメソッドは、渡されたパラメーターの型が関数によって宣言されたパラメーターの型と一致することを保証し、コードが正しくコンパイルされ、実行されるようにします。

以上がgolang エラーの修正方法: 関数の引数で 'x' (型 T) を型 U として使用することはできませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。