"Go에서 인터페이스는 메서드 계약을 정의하지만 필드 액세스를 정의하지 않아 인터페이스를 통해 구조체 필드를 직접 액세스하려고 하면 컴파일 타임 에러가 발생합니다. 구조체가 인터페이스에 할당되면 구조체의 값이 숨겨지게 되어 특정 메서드를 사용하여 액세스해야 합니다. API 페이로드 처리와 같은 일반적인 시나리오에서는 인터페이스가 "Name"과 같은 구조체 필드에 대해 알지 못하므로 제약이 발생합니다. 타입 어서션은 기본 타입을 확인하여 특정 필드에 액세스할 수 있도록 해주는 솔루션으로, souvent `if` 문 또는 타입 스위치와 함께 사용됩니다. 대안으로는 리플렉션이 동적으로 필드에 액세스할 수 있지만, 복잡성과 에러 가능성으로 인해 주의하여 사용해야 합니다. Go의 엄격한 타이핑은 인터페이스 계약과 구조체 구현을 분리하여 버그를 방지하는 것을 목표로 합니다. 인터페이스가 구조체 필드를 갖지 않는다는 것을 이해하면 직접 필드 액세스가 실패하는 이유를 분명하게 알 수 있습니다. 타입 어서션과 리플렉션은 필요한 경우에 이러한 제약을 극복하는 도구입니다. 코드의 요구 사항과 동적 수준에 따라 적절한 방법을 선택하세요. 전체 토의에는 코드 샘플과 리플렉션 예제가 포함되어 있습니다."
dev.to
Why You Can’t Access Struct Fields Through Interfaces in Go (and How to Fix It)
