Go에서 포인터가 아닌 값을 가진 인터페이스를 주소 지정할 수 없는 이유
Golang의 인터페이스 문서에 따르면 인터페이스 내에 저장된 값은 주소를 지정할 수 없다고 나와 있습니다. 지도의 요소에. 이는 왜 인터페이스 값을 주소 지정할 수 없는지에 대한 의문을 제기합니다.
tl;dr: 유형 무결성 유지
유형 무결성을 유지하기 위해 인터페이스에 저장된 포인터가 아닌 값 주소를 지정할 수 없습니다. 인터페이스 내에서 A 유형의 값을 가리키는 포인터(*A)를 생각해 보세요. 이후에 다른 유형(예: B)이 인터페이스에 저장된 경우 A에 대한 포인터가 유효하지 않게 되어 유형 안전성이 손상됩니다.
의미 해결
인터페이스의 경우 값을 다룰 수 있으면 예상치 못한 결과가 발생할 수 있습니다. 예를 들어 인터페이스 I, I를 구현하는 두 가지 유형 A 및 B, I 인스턴스에 저장된 A를 사용하면 저장된 값의 주소를 사용하면 해당 주소를 통해 원래 값을 수정할 수 있습니다. 그러나 다른 값 B가 I에 저장되면 원래 A 값에 대한 포인터가 유효하지 않게 됩니다.
포인터 주의사항
포인터가 아닌 인터페이스 값은 그렇지 않습니다. 주소 지정이 가능하면 명시적 캐스팅(예: var a2 A = i.(A) 다음에 var aPtr *A)을 사용하여 값 복사본에 대한 포인터를 얻을 수 있습니다. = &a2.
결론
인터페이스 값의 주소 지정 불가능성은 서로 다른 유형의 값이 인터페이스에 저장될 때 잘못된 포인터 참조를 방지하여 유형 무결성을 보장합니다.
위 내용은 Go 인터페이스의 포인터가 아닌 값을 주소 지정할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!