> 백엔드 개발 > Golang > Go의 유형 추론이 구조체 필드 할당에서 실패하는 이유는 무엇입니까?

Go의 유형 추론이 구조체 필드 할당에서 실패하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-21 01:16:13
원래의
926명이 탐색했습니다.

Why Does Go's Type Inference Fail with Struct Field Assignments?

구조체 할당의 유형 추론

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿