> 백엔드 개발 > Golang > 메소드 호출 후 Go 구조체 필드가 ​​되돌려지는 이유는 무엇입니까?

메소드 호출 후 Go 구조체 필드가 ​​되돌려지는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-15 05:48:02
원래의
367명이 탐색했습니다.

Why Does My Go Struct Field Revert After a Method Call?

구조체 필드 되돌리기

제공된 Go 코드에서 구조체 필드가 ​​메소드 내에서 변경되었지만 해당 필드로 되돌아가는 이상한 동작이 관찰되었습니다. 나중에 확인할 때 원래 값입니다. 이 문제는 구조체가 포인터 대신 으로 전달된다는 사실에서 비롯됩니다.

설명:

TVManager 구조체의 sendMessage 메서드에서 커넥터 구조체의 sendCommand 메서드는 TVManager 구조체. 구조체가 값으로 전달되면 구조체의 복사본이 생성되어 원본 구조체에 대한 참조 대신 전달됩니다.

MockConnector 구조체의 sendCommand 메서드에서 커넥터 구조체(예: last_command, value)가 수정됩니다. 그러나 커넥터가 값으로 전달되므로 수정 사항은 구조체의 복사본에만 적용되고 원본 구조체에는 적용되지 않습니다.

이 문제를 해결하려면 sendCommand 메소드는 값 대신 포인터로 전달되어야 합니다. 이를 통해 메서드가 복사본이 아닌 원본 커넥터 구조를 수정할 수 있습니다.

해결책:

바꾸기:

func (this MockConnector) sendCommand(payload map[string]string)
로그인 후 복사

다음으로:

func (this *MockConnector) sendCommand(payload map[string]string)
로그인 후 복사

추가 고려 사항:

  • Go에서 "this"를 수신자 이름으로 사용하는 것은 일반적으로 권장되지 않습니다.
  • 주어진 유형의 한 메소드에 포인터 수신기의 모든 메서드에 포인터 수신기를 사용하는 것이 가장 좋습니다. 입력하세요.

위 내용은 메소드 호출 후 Go 구조체 필드가 ​​되돌려지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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