>  기사  >  백엔드 개발  >  golang 오류: "인수에서 x(y 유형)를 z 유형으로 사용할 수 없습니다..." 어떻게 해결합니까?

golang 오류: "인수에서 x(y 유형)를 z 유형으로 사용할 수 없습니다..." 어떻게 해결합니까?

WBOY
WBOY원래의
2023-06-25 08:29:241313검색

golang으로 프로그래밍할 때 유형 오류가 자주 발생합니다. 가장 일반적인 오류 중 하나는 "...에 대한 인수에서 x(y 유형)를 z 유형으로 사용할 수 없습니다." 오류입니다. 이 오류는 비교적 간단해 보이지만 실제로는 개발자에게 골칫거리가 되는 경우도 있습니다.

그렇다면 이 문제를 어떻게 해결해야 할까요? 아래에서는 이 문제를 분석하고 해결책을 제시하겠습니다.

문제 분석

우선 몇 가지 기본 개념을 이해해야 합니다. golang에서 각 변수에는 내장 유형 또는 사용자 정의 유형이 될 수 있는 유형이 있습니다. 함수 호출에서는 매개변수를 전달해야 합니다. 이러한 매개변수에는 함수 시그니처에 정의된 것과 동일한 유형이거나 호환 가능한 유형일 수도 있는 유형이 있습니다. 전달된 매개변수 유형이 함수 시그니처에 정의된 유형과 일치하지 않으면 "...에 대한 인수에서 x(y 유형)를 z 유형으로 사용할 수 없습니다." 오류가 발생합니다.

예를 들어 다음 함수를 정의합니다.

func foo(s string) {
    fmt.Println(s)
}

문자열 매개변수를 받아야 합니다. 다음과 같이 함수를 호출하려고 하면

var i int = 10
foo(i)

다음 오류가 나타납니다.

cannot use i (type int) as type string in argument to foo

이유는 간단합니다. 전달된 매개변수는 int 유형이지만 함수에는 문자열 유형 매개변수가 필요합니다.

Solutions

이 유형의 오류를 해결하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 가능한 해결 방법입니다.

방법 1: 변수 유형 변경

가장 간단한 해결책은 변수 유형을 변경하는 것입니다. 예를 들어, 위의 예에서 변수 i의 유형을 int에서 string으로 변경할 수 있습니다.

var i string = "hello"
foo(i)

이렇게 하면 유형 오류가 발생하지 않습니다.

방법 2: 유형 변환 사용

유형 변환을 사용하여 한 유형을 다른 유형으로 변환할 수 있습니다. golang에서는 유형 변환 연산자를 사용하여 이 프로세스를 달성할 수 있습니다. 예를 들어 위의 예에서 int 유형의 변수 i를 다음과 같이 문자열 유형으로 변환할 수 있습니다.

var i int = 10
foo(strconv.Itoa(i))

여기에서는 strconv 패키지의 Itoa 메소드를 사용하여 int 유형을 문자열 유형으로 변환했습니다.

방법 3: 함수 서명 변경

위의 두 가지 해결 방법 중 어느 것도 가능하지 않은 경우 전달된 매개 변수 유형을 허용하도록 함수 서명을 변경해야 할 수도 있습니다. 위의 예에서는 int 유형을 허용하도록 함수 시그니처를 변경할 수 있습니다.

func foo(i int) {
    fmt.Println(i)
}

그런 다음 foo 함수를 직접 호출할 수 있습니다.

var i int = 10
foo(i)

이렇게 하면 유형 캐스팅을 사용하거나 변수 유형을 변경할 필요가 없습니다.

요약

위의 분석과 솔루션을 통해 "cannot use x (type y) as type z in..." 오류를 해결할 수 있는 방법이 많다는 것을 알 수 있습니다. 변수 유형을 변경하고, 유형 변환을 사용하고, 함수 서명을 변경할 수도 있습니다. 그러나 실제 개발에서는 타입 오류 발생을 최소화할 수 있는 함수 시그니처 및 변수 유형의 사양을 따르는 것이 좋습니다.

위 내용은 golang 오류: "인수에서 x(y 유형)를 z 유형으로 사용할 수 없습니다..." 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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