ホームページ >バックエンド開発 >Golang >Go の型エイリアスと型定義がメソッド継承において異なるのはどのような場合ですか?

Go の型エイリアスと型定義がメソッド継承において異なるのはどのような場合ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-19 18:51:03501ブラウズ

When Do Type Aliases and Type Definitions in Go Differ in Method Inheritance?

型エイリアスと型定義

Go では、型宣言はエイリアス宣言と型定義の 2 つのカテゴリに分類できます。この区別を理解することは、durWithoutMethods や SameAsDuration などの型エイリアスの興味深い動作を理解するために重要です。

エイリアス宣言

エイリアス宣言は、既存の型の新しい識別子を作成するだけです。この新しい識別子は、元の名前と交換可能です。たとえば、「dur = time.Duration」と入力すると、time.Duration のエイリアスが作成されます。 dur と time.Duration を使用して変数を宣言すると、同じ動作になります。

型定義

対照的に、型定義は新しい型を作成します。これらは、基になる型からすべてのメソッドを取り除きます。これは、型 type x struct { y time.Duration } を定義した場合、x は time.Duration のメソッドを継承しないことを意味します。これは、time.Duration が生の型、つまりメソッドが付加されていない型であるためです。

これを例に適用すると、

  • durWithMethods dur: このエイリアス宣言は、基礎となる型として dur を持つ新しい型 durWithMethods を作成します。 dur には time.Duration が埋め込まれているため、dur と durWithMethods は、Duration.String().
  • durWithoutMethods time.Duration: を継承します。この型定義は、time.Duration とは別の新しい型 durWithoutMethods を作成します。結果として、durWithoutMethods は、Duration.String() を継承しません。
  • type SameAsDuration = time.Duration: この型エイリアス宣言は、sameAsDuration と time.Duration が同じ型であることを示します。したがって、sameAsDuration には String() メソッドもあります。

以上がGo の型エイリアスと型定義がメソッド継承において異なるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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