>  기사  >  백엔드 개발  >  golang 오류 수정 방법: 함수 인수에서 'x'(T 유형)를 U 유형으로 사용할 수 없습니다.

golang 오류 수정 방법: 함수 인수에서 'x'(T 유형)를 U 유형으로 사용할 수 없습니다.

PHPz
PHPz원래의
2023-08-21 22:21:27952검색

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

golang 오류 수정 방법: 함수 인수에서 'x'(유형 T)를 U 유형으로 사용할 수 없습니다.

Go에서 코드를 작성할 때 'x'(유형 T)를 유형으로 사용할 수 없는 경우가 있습니다. 함수 인수에 U가 있습니다." 이러한 컴파일 오류가 발생했습니다. 이 오류는 함수 호출에서 전달된 매개변수 유형이 함수에서 선언한 매개변수 유형과 일치하지 않기 때문에 발생합니다. 이 문서에서는 몇 가지 일반적인 상황과 이 오류를 해결하는 방법을 설명합니다.

  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에 문자열이 전달됩니다. 코드> 함수 유형 매개변수. 이 오류를 수정하려면 전달된 매개변수 유형이 함수에서 선언한 매개변수 유형과 일치하는지 확인해야 합니다. 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

수정 1: 매개변수 유형을 함수에서 예상하는 유형으로 변환합니다. 예를 들어 문자열을 정수로 변환하려면 strconv.Atoi 함수를 사용하세요.

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

수정 2: 문자열의 내용을 정수로 변환할 수 있다고 확신하는 경우 strconv.Atoi 함수를 직접 사용하여 변환하고 결과를 함수에 직접 전달할 수 있습니다. 🎜rrreee
    🎜사용자 정의 유형 불일치🎜사용자 정의 유형이 필수 매개변수 유형과 일치하지 않는 경우에도 오류가 보고됩니다. 예를 들어, 이 오류는 함수가 User 유형의 매개변수를 예상하지만 Admin 유형의 매개변수를 전달하는 경우에도 발생합니다. 🎜🎜🎜다음은 샘플 코드입니다. 🎜rrreee🎜위 코드에서 printUserInfo 함수는 User 유형의 매개변수를 수신할 것으로 예상하지만 main Admin 유형의 매개변수가 함수에 전달됩니다. 이 오류를 수정하려면 전달된 매개변수 유형이 함수에서 선언한 매개변수 유형과 일치하는지 확인해야 합니다. 🎜🎜Fix: Admin 유형의 User 필드를 함수 매개변수로 사용할 수 있습니다. 🎜rrreee🎜위 방법을 사용하면 Go에서 프로그래밍하는 동안 발생하는 "함수 인수에서 'x'(유형 T)를 유형 U로 사용할 수 없습니다." 오류를 수정할 수 있습니다. 이러한 메서드는 전달된 매개변수 유형이 함수에서 선언된 매개변수 유형과 일치하는지 확인하여 코드가 올바르게 컴파일되고 실행되도록 합니다. 🎜

위 내용은 golang 오류 수정 방법: 함수 인수에서 'x'(T 유형)를 U 유형으로 사용할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.