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] }
첫 번째 스니펫은 유효하고 두 번째 스니펫은 유효하지 않은 이유에 대한 의문이 제기됩니다. 또한 현재와 같은 임시 변수를 사용하지 않는 방법이 있는지 궁금할 수도 있습니다.
이 동작을 이해하는 열쇠는 "쉼표"에 있습니다. 알았어" 패턴. Go에서 맵에 액세스할 때 결과는 키와 연관된 값과 키가 맵에 존재하는지 여부를 나타내는 부울 값의 쌍입니다. 이는 누락된 키와 0 값을 구별하는 데 자주 사용됩니다.
첫 번째 코드 조각에서 all[id] 표현식은 할당되어 존재하는 값 쌍을 반환합니다. 그런 다음 return 문은 이러한 값을 반환합니다.
컴파일러는 다중 값 할당이 유효한지 여부를 결정하는 역할을 합니다. 함수가 여러 값을 반환하지만 왼쪽의 수신자에게 변수가 하나만 있는 경우 컴파일러는 오류를 발생시킵니다. 이는 컴파일러가 반환된 값의 수가 이를 수신하는 변수의 수와 일치할 것으로 예상하기 때문입니다.
두 번째 코드 조각의 경우 return all[id] 표현식은 호환되지 않는 하나의 값만 반환합니다. 왼쪽에 두 개의 변수가 있습니다. 따라서 컴파일러는 오류를 보고합니다.
안타깝게도 Go 함수에서 여러 값을 반환할 때 임시 변수 사용을 피할 수 있는 방법은 없습니다. 이는 컴파일러가 반환된 값의 개수를 수신하는 변수의 개수와 일치하도록 요구하기 때문입니다. 그러나 명명된 반환 값을 사용하거나 구조체를 반환하면 임시 변수의 사용을 최소화할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3