인터페이스 내 값 주소 지정
인터페이스에 저장된 값의 주소를 얻으려고 하면 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!