구조체 할당의 유형 추론
Go의 유형 추론은 특정 시나리오에서 명시적인 유형 주석을 생략할 수 있는 편리한 기능입니다. 그러나 구조화된 유형의 필드에 값을 할당할 때 특정 제한이 발생할 수 있습니다.
다음 코드 조각을 고려하세요.
i := 10 next := 11 prev, i := i, next
여기서 i에 대한 할당은 prev 유형을 추론하고 선언합니다. int로 표시됩니다.
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
그러나 이 코드에서는 f.Bar에 대한 할당이 유형을 유추하지 못합니다. 이전의 대신 다음과 같은 오류가 발생합니다. ":="의 왼쪽에 이름이 없습니다.
왜 이런 일이 발생합니까? 구조체 유형(Foo)이 있으면 유형 추론 프로세스가 중단되는 것으로 나타났습니다. 첫 번째 코드 조각과 같은 간단한 할당에서 유형 추론은 컨텍스트에 따라 할당된 변수의 유형을 결정합니다. 그러나 두 번째 코드 조각에서는 구조체가 있으면 여러 구성 요소가 포함된 표현식이 생성되어 유형 추론이 모호해집니다.
이것이 Go의 버그인가요? 알고 보니 이는 문제 6842에서 논의된 알려진 문제입니다:
문제 6842: spec: 짧은 선언 표기법으로 필드에 할당
문제 해결되지 않은 상태로 남아 있어 이 동작이 의도된 것임을 나타냅니다. 이 제한 사항을 해결하려면 prev 변수에 주석을 명시적으로 입력하거나 f.Bar = next와 같은 더 긴 형식의 할당을 사용할 수 있습니다.
위 내용은 Go의 유형 추론이 구조체 필드 할당에서 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!