>  기사  >  백엔드 개발  >  Go 인터페이스에 저장된 값의 주소를 얻을 수 없는 이유는 무엇입니까?

Go 인터페이스에 저장된 값의 주소를 얻을 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 09:16:02883검색

 Why Can't I Get the Address of a Value Stored in a Go Interface?

인터페이스 내 값 주소 지정

인터페이스에 저장된 값의 주소를 얻으려고 하면 "cannot"와 같은 오류가 발생하는 경우가 많습니다. el.Value.(retry)"의 주소를 가져옵니다. 이러한 제한 사항을 이해하려면 인터페이스 변수의 특성을 조사해야 합니다.

인터페이스 변수는 두 부분으로 구성됩니다. 하나는 포함된 값의 유형을 설명하는 부분이고 다른 부분은 값을 직접 저장하거나 값에 대한 포인터를 보유하는 부분입니다. 저장. 인터페이스에 저장된 값은 인터페이스 변수 자체가 소유합니다. 또한 인터페이스에 새 값이 할당되면 이 값에 대한 저장소를 재사용할 수 있습니다.

예:

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>

이 시나리오에서 정수를 저장하는 데 사용되는 저장소는 다음과 같습니다. 포인터를 보유하도록 용도가 변경되어 *p의 값을 새 포인터의 유효하지 않은 정수 표현으로 렌더링합니다. 이러한 동작은 유형 시스템을 쉽게 훼손할 수 있으며 이러한 이유로 Go는 인터페이스 값의 주소를 얻는 직접적인 방법을 제공하지 않습니다(안전하지 않은 패키지 사용 제외).

에 저장된 구조에 대한 포인터가 필요한 경우 목록을 사용하려면 구조를 직접 저장하는 대신 구조 자체에 대한 포인터를 저장하는 것이 좋습니다. 또는 *list.Element 값을 포함된 구조에 대한 참조로 사용할 수 있습니다.

위 내용은 Go 인터페이스에 저장된 값의 주소를 얻을 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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