>  기사  >  백엔드 개발  >  Go에서 함수의 반환 값을 분할할 수 없는 이유는 무엇입니까?

Go에서 함수의 반환 값을 분할할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 02:45:30111검색

Why Can't I Slice a Function's Return Value in Go?

변수와 함수 반환 값의 동작 차이 이해

제공된 코드에서 의도는 두 줄의 코드를 결합하는 것입니다. 특정 작업을 수행합니다. 그러나 두 번째 시도에서는 오류가 발생합니다.

두 번째 경우 오류 발생

"models/models.go:104:잘못된 작업 sha1. Sum(([]byte)(uf.Pwd))[:] (주소를 지정할 수 없는 값의 슬라이스)"는 두 번째 경우의 슬라이싱에 문제가 있음을 나타냅니다. 특히 sha1.Sum() 함수 호출의 반환 값을 슬라이스하려고 하면 문제가 발생합니다.

문제 이유

Go의 함수 반환 값은 다음과 같습니다. 주소 지정이 불가능합니다. 즉 주소 지정이 필요한 작업에서 피연산자로 사용할 수 없습니다. 이 경우 배열을 슬라이싱하려면 배열에 주소를 지정할 수 있어야 합니다.

함수 반환 값

Go에서 다음 엔터티만 주소를 지정할 수 있습니다.

  • 변수
  • 포인터 간접
  • 슬라이스 인덱싱 작업
  • 주소 지정 가능한 구조체의 필드 선택기
  • 주소 지정 가능한 배열의 배열 인덱싱 작업

해결책 및 첫 번째 사례

첫 번째 사례는 sha1.Sum()의 반환 값이 먼저 주소 지정이 가능한 지역 변수(해시)에 저장되기 때문에 올바르게 작동합니다. 그러면 이 지역 변수는 슬라이싱을 포함한 후속 작업에서 사용될 수 있습니다.

결론

두 번째 경우와 같은 오류를 방지하려면 다음 사항을 이해하는 것이 중요합니다. Go의 주소 지정 규칙. 함수 반환 값은 주소 지정이 불가능하며 슬라이싱을 위해서는 배열 피연산자의 주소 지정이 필요합니다.

위 내용은 Go에서 함수의 반환 값을 분할할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.