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

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

WBOY
WBOY원래의
2023-06-24 13:42:071353검색

golang 개발 중에 "필드에서 x(y 유형)를 z 유형으로 사용할 수 없습니다…"라는 오류가 자주 발생합니다. 이 오류는 일반적으로 값을 할당할 때 유형 불일치로 인해 발생합니다.

다음은 이 오류를 일으킬 수 있는 여러 시나리오와 해결 방법입니다.

  1. 구조의 필드 유형이 일치하지 않습니다.

구조의 여러 필드와 일부 필드를 정의하는 경우 이 오류는 유형이 다음과 같은 경우에 발생합니다. 일치하지 않는. 예:

type Person struct {
    Name string
    Age  int
    Height float32
}
 
type Employee struct {
    Name   string
    Age    int
    Salary float32
}
 
func main() {
    var p Person
    var e Employee
 
    p = e
}

다음 오류 메시지가 표시됩니다. "배정에서 e(직원 유형)를 개인 유형으로 사용할 수 없습니다." Person과 Employee의 구조 필드가 일치하지 않기 때문에 서로 값을 할당할 수 없습니다. 해결 방법은 구조를 재정의하거나 필드 유형이 일치하도록 두 구조를 유형 캐스팅하는 것입니다.

  1. 인터페이스 유형 할당 사용

인터페이스 유형 변수를 할당에 사용할 때 이 오류가 발생할 수도 있습니다. 예:

type Person interface {
   GetName() string
   GetAge() int
}
 
type Employee struct {
    Name   string
    Age    int
    Salary float32
}
 
func (e *Employee) GetName() string {
    return e.Name
}
 
func (e *Employee) GetAge() int {
    return e.Age
}
 
func main() {
    var p Person
    var e Employee
 
    p = e
}

다음 오류 메시지가 표시됩니다. "할당에서 e(직원 유형)를 Person 유형으로 사용할 수 없습니다. 직원이 Person을 구현하지 않습니다(GetAge 메서드 누락)." Employee는 Person 인터페이스에서 GetAge() 메서드를 구현하지 않기 때문에 Person 유형의 변수에 할당할 수 없습니다. 해결책은 Employee 구조에 GetAge() 메서드를 추가하거나 Person 인터페이스를 구현하는 구조를 재정의하는 것입니다.

  1. 유형 변환 오류

이 오류는 다른 유형의 변수를 변환할 때도 발생할 수 있습니다. 예:

var a int
var b int32
 
a = b //cannot use b (type int32) as type int in assignment
a = int(b)

다음 오류 메시지가 표시됩니다. "할당 시 b(int32 유형)를 int 유형으로 사용할 수 없습니다." b는 int32 유형이므로 int 유형의 변수 a에 직접 할당할 수 없습니다. b를 int 유형으로 변환하려면 유형 변환을 사용해야 합니다.

요약:

golang에서 다양한 유형의 할당을 사용할 때 유형 일치 문제, 특히 구조 및 인터페이스 유형에서 필드와 메소드의 일치에 주의해야 합니다. 유형을 변환할 때 유형 변환이 가능한지 확인하십시오. 그렇지 않으면 유형 불일치 문제도 발생합니다. 변수가 올바른 유형인지 확인하기 위해 코드를 다시 확인하고 가능한 오류 시나리오에 주의해야 합니다.

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

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