Go에서 여러 값을 반환하려고 할 때 특정 구문은 유효하고 다른 구문은 유효하지 않은 이유가 혼란스러워 보일 수 있습니다. 이를 설명하기 위해 다음 두 코드 조각을 고려하십시오.
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
첫 번째 코드 조각은 유효하며 Info 및 bool 값을 모두 반환합니다. 그러나 두 번째 스니펫은 유효하지 않습니다.
func FindUserInfo(id string) (Info, bool) { return all[id] }
첫 번째 스니펫은 유효하고 두 번째 스니펫은 유효하지 않은 이유에 대한 의문이 제기됩니다. 추가적으로, 현재와 같은 임시 변수의 사용을 피할 수 있는 방법이 있는지 궁금할 수도 있습니다.
이 동작을 이해하는 열쇠는 "comma ok" 패턴에 있습니다. 알았어" 패턴. Go에서 맵에 액세스할 때 결과는 키와 연관된 값과 키가 맵에 존재하는지 여부를 나타내는 부울 값의 쌍입니다. 이는 누락된 키와 0 값을 구별하는 데 자주 사용됩니다.
첫 번째 코드 조각에서 all[id] 표현식은 할당되어 존재하는 값 쌍을 반환합니다. 그런 다음 return 문은 이러한 값을 반환합니다.
컴파일러는 다중 값 할당이 유효한지 여부를 결정하는 역할을 합니다. 함수가 여러 값을 반환하지만 왼쪽의 수신자에게 변수가 하나만 있는 경우 컴파일러는 오류를 발생시킵니다. 이는 컴파일러가 반환된 값의 수가 이를 수신하는 변수의 수와 일치할 것으로 예상하기 때문입니다.
두 번째 코드 조각의 경우 return all[id] 표현식은 호환되지 않는 하나의 값만 반환합니다. 왼쪽에 두 개의 변수가 있습니다. 따라서 컴파일러는 오류를 보고합니다.
안타깝게도 Go 함수에서 여러 값을 반환할 때 임시 변수 사용을 피할 수 있는 방법은 없습니다. 이는 컴파일러가 반환된 값의 개수를 수신하는 변수의 개수와 일치하도록 요구하기 때문입니다. 하지만 명명된 반환 값을 사용하거나 구조체를 반환하면 임시 변수의 사용을 최소화할 수 있습니다.
위 내용은 Go 함수가 여러 값을 직접 반환할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!