ホームページ > バックエンド開発 > Golang > 埋め込みまたは空のインターフェイスを使用して Go で構造体の複雑な階層を慣用的に作成する方法

埋め込みまたは空のインターフェイスを使用して Go で構造体の複雑な階層を慣用的に作成する方法

Susan Sarandon
リリース: 2025-01-01 14:42:12
オリジナル
227 人が閲覧しました

How to Idiomatically Create a Complex Hierarchy of Structs in Go Using Embedding or Empty Interfaces?

Go で構造体の複雑な階層を作成する慣用的な方法

構造体の階層を設計する際、Go は型の関係を整理するための 2 つのアプローチを提供します。埋め込みと空のインターフェイスです。メソッド。

空のインターフェイスメソッド

Go の「空のメソッド」アプローチでは、インターフェイスと空のメソッドを使用して型の階層を表します。空のメソッドとは、実装がまったくないメソッドです。その目的は、単にタイプがインターフェイスを満たすことをマークすることです。

提供された例では、タイプ Object、Immovable、Building、Movable、Car、および Bike が階層を形成しており、次の実装では空のインターフェイスを使用しています。

type Object interface {
  object()
}

type Immovable interface {
  Object
  immovable()
}

type Building struct {
  ...
}

type Mountain struct {
  ...
}

type Movable interface {
  Object
  movable()
}

type Car struct {
  ...
}

type Mountain struct {
  ...
}

func (*Building) object() {}
func (*Mountain) object() {}
func (*Car) object() {}
func (*Bike) object() {}
func (*Building) immovable() {}
func (*Mountain) immovable() {}
func (*Car) movable() {}
func (*Bike) movable() {}
ログイン後にコピー

このメソッドは型の関係を明示的に文書化し、互換性のないものの代入を防ぎます。 type.

Embedding

Go は、構造体が別の構造体のメソッドを継承できるようにする埋め込みもサポートしています。埋め込みを使用すると、階層は次のように表すことができます。

type ObjectImpl struct {}
func (o *ObjectImpl) object() {}

type ImmovableImpl struct {
  *ObjectImpl // Embed ObjectImpl struct
}
func (o *Immovable) immovable() {}

type Building struct {
  *ImmovableImpl // Embed ImmovableImpl struct
}

type MovableImpl struct {
  *ObjectImpl // Embed ObjectImpl struct
}
func (o *Movable) movable() {}

type Car struct {
  *MovableImpl // Embed MovableImpl struct
}

type Bike struct {
  *MovableImpl // Embed MovableImpl struct
}
ログイン後にコピー

埋め込みは、Go の継承のようなメカニズムを利用して空のメソッドの数を減らす代替アプローチを提供します。

以上が埋め込みまたは空のインターフェイスを使用して Go で構造体の複雑な階層を慣用的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート