Goでは、インターフェースはメソッドの契約を定義するが、フィールドへのアクセスを定義しないため、インターフェースを通じて構造体のフィールドに直接アクセスしようとすると、コンパイル時エラーが発生します。構造体をインターフェースに割り当てると、構造体の値は隠され、特定のメソッドを使用してアクセスする必要があります。APIペイロードの処理などの一般的なシナリオでは、この制限が示されます。インターフェースは「Name」などの構造体フィールドについて知識を持っていないためです。型アサーションは、基礎となる型を確認することで解決策を提供し、特定のフィールドへのアクセスを可能にします。型アサーションは、`if` 文や型スイッチと組み合わせて使用されることがよくあります。代替として、リフレクションを使用してフィールドに動的にアクセスできますが、複雑さとエラーの可能性があるため、注意して使用する必要があります。Goの厳格な型付けは、インターフェースの契約と構造体の実装を明確に分離することでバグを防ぐことを目的としています。インターフェースが構造体フィールドを持たないことを理解することで、直接フィールドアクセスが失敗する理由が明らかになります。型アサーションとリフレクションは、必要に応じてこの制限を克服するためのツールです。コードのニーズと必要なダイナミズムのレベルに最も適した方法を選択してください。完全な説明には、コードサンプルとリフレクションの例が含まれます。
dev.to
Why You Can’t Access Struct Fields Through Interfaces in Go (and How to Fix It)
Create attached notes ...
