Go の関数インターフェイス
Go インターフェイスは主に、データではなく機能を定義するために使用されます。インターフェイスでメソッドを定義できますが、必須フィールドを指定することはできません。ただし、この制限を回避してデータをモデル化するインターフェイスを作成する方法はあります。
埋め込み構造体を使用したデータ インターフェイスのエミュレーション
1 つの方法は、埋め込み構造体を使用することです。 Name フィールドと Age フィールドを含む Person インターフェイスを定義する例を考えてみましょう。
type PersonProvider interface { GetPerson() *Person } type Person struct { Name string Age int64 }
これで、PersonProvider を実装する構造体に Person を埋め込み、Getperson メソッドを通じてそのフィールドを公開できます。
type Bob struct { FavoriteNumber int64 Person }
この手法は、コンパイル時の型の安全性を確保しながら、インターフェイスを通じてデータを公開する手段を提供します。ただし、それでもポインターが公開され、データへの直接アクセスが可能になることに注意することが重要です。
データ属性を公開するケース
エミュレーション技術は有効ですが、それが最善のアプローチであるかどうかという疑問が生じます。 Go の規約では、データ アクセスに抽象化の使用を厳密に義務付けているわけではありません。特に直接アクセスが必要な場合は、パブリック データ属性を公開する方が簡単で効率的な場合があります。
ただし、データ公開により将来の変更が複雑になる可能性がある場合は、プロパティへのアクセスと変更にメソッドを使用することを検討するのが賢明です。これにより、API の互換性を維持しながら、基礎となるデータ構造をより柔軟に進化させることができます。
ゲッターとセッターの利点
ゲッターとセッターの背後にプロパティを隠すことには、いくつかの利点があります。
考慮事項と注意事項
以上がGo インターフェイスはデータを直接公開する必要がありますか、それともゲッターとセッターを介して公開する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。