ホームページ >バックエンド開発 >Golang >Go で名前付き型のメソッドを呼び出せないのはなぜですか? 埋め込みでこれを解決するにはどうすればよいですか?

Go で名前付き型のメソッドを呼び出せないのはなぜですか? 埋め込みでこれを解決するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-14 16:00:19386ブラウズ

Why Can't I Call Methods on a Named Type in Go, and How Can Embedding Solve This?

名前付き型のメソッドの呼び出し

Go では、名前付き型は既存のデータ型から作成される新しいデータ型です。これは、JSON データをアンマーシャリングする場合など、基になる型にカスタム メソッドを追加する場合に役立ちます。ただし、名前付き型が以下に示す方法で作成されると、基になる型のメソッドを呼び出す機能が失われます。

type StartTime time.Time

たとえば、myStartTime で Date() メソッドを呼び出そうとすると、次のような結果になります。エラー: myStartTime.Date 未定義 (タイプ my_package.StartTime にはフィールドまたはメソッド Date がありません)。

解決策:埋め込みの利用

この問題を解決し、基礎となる型の元のメソッドを保持するには、埋め込みを利用できます。基になる型を埋め込むことにより、名前付き型はそのすべてのメソッドとフィールドを継承します。このプロセスを以下に示します。

type StartTime struct {
    time.Time
}

このシナリオでは、time.Time のすべてのメソッドとフィールドが「昇格」され、名前付き型を通じてアクセスできるようになります。その結果、StartTime 型の変数である s で Date() を呼び出しても、エラーが発生しなくなりました。

サンプル ショーケース:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}

このコードでは次の結果が得られます。出力:

2009 November 10

埋め込みを採用することで、既存の型の機能を簡単に拡張できます。元の機能を維持します。

以上がGo で名前付き型のメソッドを呼び出せないのはなぜですか? 埋め込みでこれを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。