Go가 할당에서 유형을 추론하지 못함: 문제 이해
이 질문은 구조체 필드에 값을 할당할 때 발생하는 유형 추론 오류와 관련이 있습니다. Go에서는 짧은 선언 표기법을 사용합니다.
문제
다음 코드 조각을 고려하세요.
i := 10 next := 11 prev, i := i, next
이 코드는 의도한 대로 작동하여 prev 및 i에 대한 올바른 유형을 유추합니다. 그러나 구조체 필드 할당과 관련된 유사해 보이는 스니펫은 추론 입력에 실패합니다.
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
이번에는 Go가 ":=" 왼쪽에 이름이 없음에 대해 불평합니다.
설명
짧은 선언 구문을 사용하여 구조체 필드에 할당할 때 차이점은 다음과 같습니다. Go에서는 왼쪽에 구조체 이름, 점(.) 및 필드 이름이 올 것으로 예상합니다. 예를 들어, f.Bar입니다. 그러나 f만으로는 유효한 왼쪽 할당이 아닙니다.
해결책
짧은 선언 표기법을 사용하여 구조체 필드에 할당하는 올바른 방법은 다음과 같습니다. :
f.Bar, prev = next, f.Bar
이 구문은 구조체 이름, 필드 이름 및 할당을 명확하게 나타냅니다.
버그인가요?
여기에서 논의된 동작은 버그가 아닙니다. Short 선언 표기법의 한계입니다. 그러나 Go 이슈 추적기에는 구조체 필드에 할당할 수 있도록 짧은 선언 구문 확장을 제안하는 공개 문제(문제 6842)가 있습니다. 이 문제가 해결될 때까지 위에 표시된 보다 자세한 대안을 사용하는 것이 좋습니다.
위 내용은 짧은 변수 선언을 사용하여 구조체 필드에 할당할 때 Go가 유형을 추론하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!