構造体の埋め込み: ポインターを優先する場合
ある構造体を別の構造体内に埋め込む場合、ポインターを使用するか、埋め込み値を使用するかの 2 つのオプションがあります。 。この決定を行うには、仕様を理解し、それぞれのアプローチの利点を考慮することが重要です。
ポインタと埋め込み値
Go の仕様によると、匿名フィールド (埋め込みフィールドとも呼ばれる) は、型名または非インターフェイス型名へのポインターとして宣言できます。つまり、次の例では、Logger フィールドにタイプ log.Logger を使用するか、ポインタ *log.Logger を使用するかを選択できます。
type Job struct {
Command string
*log.Logger
}
ポインターの利点
Eric Urban による記事「Embedding in Go」では、「ポインターによる埋め込み」と呼ばれるポインターの埋め込みの利点が強調されています。 。」これらには以下が含まれます:
ポインター埋め込みの例
type Bitmap struct{
data [4][5]bool
}
type Renderer struct{
*Bitmap //Embed by pointer
on uint8
off uint8
}
この例では、レンダラ タイプはポインタによってビットマップを埋め込みます。これは、レンダラーの複数のインスタンスがビットマップの 1 つのインスタンスを共有し、その動作を個別にカスタマイズできることを意味します。
技術的な制限
ポインターからポインターを使用できないことに注意することが重要です。または、匿名フィールドとしてのインターフェイスへのポインタ。この制限は、これらの型にはメソッドがないという事実から生じており、これは埋め込みの重要な側面です。メソッドは埋め込み型から埋め込み型に昇格され、直接アクセスできるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3