ホームページ > バックエンド開発 > Golang > 名前付き型と埋め込み: 既存の Go 型にメソッドを追加するにはどうすればよいですか?

名前付き型と埋め込み: 既存の Go 型にメソッドを追加するにはどうすればよいですか?

DDD
リリース: 2024-12-11 08:55:12
オリジナル
967 人が閲覧しました

Named Types vs. Embedding: How Do I Add Methods to an Existing Go Type?

既存の型へのメソッドの追加: 名前付き型と埋め込み

名前付き型を扱うときは、新しい型の作成と埋め込みの違いを理解することが重要です。既存のタイプ。元のメソッドを保持しながら、既存の型にメソッドを追加する方法を見てみましょう。

ケース 1: 名前付き型

type キーワードを使用して新しい型を定義する場合、基になる型とは異なります。たとえば、次のコード スニペットでは、

type StartTime time.Time
ログイン後にコピー

StartTime は新しい型であり、Date() などの time.Time のメソッドはありません。これは、名前付き型は基になる型からメソッドを継承しないためです。

ケース 2: 埋め込み

元のメソッドを失わずに既存の型にメソッドを追加するには、次を使用します。埋め込み。これには、既存の型を埋め込む新しい構造体の作成が含まれます。たとえば、埋め込みを使用して上記のコードを書き直すことができます:

type StartTime struct {
    time.Time
}
ログイン後にコピー

この場合、StartTime は time.Time を埋め込みます。つまり、すべてのメソッドとフィールドが含まれます。

方法埋め込みが機能する

構造体が別の構造体を匿名で (フィールドを指定せずに) 埋め込む場合name)、埋め込まれた構造体のフィールドとメソッドは、埋め込み構造体に昇格されます。これは、埋め込み構造体のインスタンスで直接使用できることを意味します。

使用例

埋め込みを使用すると、StartTime と の両方のメソッドにアクセスできます。 time.Time:

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date()) // Will output the current date
}
ログイン後にコピー

結論

動作を変更する必要がある場合、または既存の型にメソッドを追加する必要がある場合は、埋め込みの使用を検討してください。これにより、型の機能を拡張しながら、元のメソッドを保持できます。

以上が名前付き型と埋め込み: 既存の Go 型にメソッドを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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