名前付き型のメソッドの呼び出し
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 サイトの他の関連記事を参照してください。