> 백엔드 개발 > Golang > 포인터 수신기를 사용하는 Go 메소드가 값 인수를 수정하는 것처럼 보이는 이유는 무엇입니까?

포인터 수신기를 사용하는 Go 메소드가 값 인수를 수정하는 것처럼 보이는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-07 17:39:13
원래의
683명이 탐색했습니다.

Why Do Go Methods with Pointer Receivers Seem to Modify Value Arguments?

포인터 수신기가 있는 메서드가 값 인수와 함께 작동하는 것처럼 보이는 이유는 무엇입니까?

Go의 Go 연습 51 둘러보기에서 Scale 메서드는 효과가 없는 것으로 설명됩니다. Vertex 값에 대해. 그러나 실험에 따르면 포인터 대신 Vertex 값이 전달된 경우에도 Scale이 입력 값을 수정하는 것으로 나타났습니다.

설명

Go의 강력한 타이핑을 위해서는 포인터 수신기가 있는 메서드가 다음과 같아야 합니다. 포인터 인수를 전달했습니다. 그러나 컴파일러는 특정 조건에서 개입하여 암시적 변환을 수행하여 값 인수를 포인터로 변환합니다.

컴파일러의 "마법"

메서드 호출 x.m()이 이루어질 때 , 컴파일러는 다음을 확인합니다.

  • 변수 x 유형의 메소드 세트에는 다음이 포함됩니다. m.
  • 제공된 인수 목록은 m의 매개변수 목록에 할당될 수 있습니다.

이러한 조건이 충족되고 x가 주소 지정 가능(복사 불가)되면 컴파일러는 코드를 다시 작성합니다. (&x).m()으로. 이 변환을 통해 포인터 수신기가 있는 메소드가 포인터와 값 모두에서 작동할 수 있습니다.

의미

이 암시적 변환은 Go 메소드 세트의 핵심 기능입니다. 프로그래머가 포인터를 명시적으로 관리하지 않고도 포인터나 값에 대해 메서드를 작동할 수 있어 코드가 단순화되고 가독성이 향상됩니다.

위 내용은 포인터 수신기를 사용하는 Go 메소드가 값 인수를 수정하는 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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