인터페이스 내에서 값 주소 가져오기
Go 프로그래밍 언어의 맥락에서 인터페이스는 집합을 정의하는 계약 역할을 합니다. 유형이 구현해야 하는 메소드. 값이 인터페이스에 할당되면 인터페이스 값으로 래핑됩니다. 그러나 인터페이스 값 자체는 실제 값을 저장하지 않고 그에 대한 참조를 보유합니다.
따라서 & 연산자를 사용하여 인터페이스 내부의 값 주소를 가져오려고 하면 설명된 것처럼 오류가 발생합니다. 다음 코드 조각에서:
<code class="go">import "container/list" type retry struct{} var el = list.Element{Value: retry{}} p := &el.Value.(retry) // Compilation error: cannot take the address of el.Value.(retry)</code>
이 오류는 인터페이스 내부의 값이 인터페이스 값 자체의 소유이고 새 값이 인터페이스에 할당될 때 해당 저장소가 재사용될 수 있다는 사실에서 발생합니다. . 획득한 주소의 값을 수정하면 인터페이스 값에 직접적인 영향을 미치게 되어 바람직하지 않으며 예상치 못한 동작이 발생할 수 있습니다.
이 상황을 해결하기 위해 사용할 수 있는 대체 접근 방식이 있습니다.
값 대신 포인터 저장:
인터페이스에 구조체 값을 직접 저장하는 대신 해당 구조체에 대한 포인터를 저장할 수 있습니다. 이렇게 하면 인터페이스 값이 변경되더라도 포인터가 유효한 상태로 유지됩니다.
요소 참조 사용:
또 다른 옵션은 *list.Element 값을 포함된 구조에 대한 참조로 전달하는 것입니다. 이는 Go의 유형 안전성을 위반하지 않고 구조체 값에 대한 간접적인 액세스를 효과적으로 제공합니다.
위 내용은 Go의 인터페이스 내부에서 값의 주소를 가져올 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!