구조체 유형에 대한 Setter 메소드 이해
Go의 구조 유형은 관련 데이터를 그룹화하는 편리한 방법을 제공하며, setter 메소드를 사용하면 수정이 가능합니다. 그들의 속성. 그러나 특정 시나리오에서는 예기치 않은 동작이 발생할 수 있습니다.
문제 설명:
Val 필드와 두 개의 setter 함수인 SetVal 및 SetVal2가 있는 구조체 T를 생각해 보세요. SetVal을 사용하면 원본 구조체가 수정되지 않지만 SetVal2는 수정됩니다. 이러한 불일치를 이해하는 것이 중요합니다.
기본 메커니즘:
구조체를 함수에 전달할 때 두 가지 접근 방식이 가능합니다.
추론:
SetVal은 구조체를 값으로 사용합니다. 매개변수. 따라서 함수 내에서 구조체의 복사본이 생성되고 t(복사본)에 대한 변경 사항은 원본 v에 영향을 주지 않습니다.
문제 해결:
수정 사항이 원본에 반영되도록 SetVal2의 포인터 수신기 접근 방식을 사용합니다. 구조체:
확인:
차이점을 보여주기 위해 인쇄 문 추가:
이 프로그램은 다음을 출력합니다.
v의 주소와 SetVal2의 포인터가 동일하여 사용법을 확인합니다. SetVal은 복사본에서 작업하는 동안 원본 구조체의 작업을 수행합니다.
위 내용은 값 수신기와 포인터 수신기를 사용할 때 Go의 구조체 설정기 메서드가 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!