>백엔드 개발 >Golang >Go 인터페이스의 포인터가 아닌 값을 주소 지정할 수 없는 이유는 무엇입니까?

Go 인터페이스의 포인터가 아닌 값을 주소 지정할 수 없는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-06 01:33:10422검색

Why Are Non-Pointer Values in Go Interfaces Not Addressable?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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