メソッド継承に対する型エイリアスの影響を理解する
Go などのプログラミング言語の一般的な側面である型エイリアスは、次のような便利な方法を提供します。既存のタイプの新しい識別子を作成します。ただし、メソッドの継承に関するこれらの動作は混乱を招く可能性があります。
次の Go コードを考えてみましょう。
package main import ( "fmt" "time" ) type dur struct { time.Duration } type durWithMethods dur type durWithoutMethods time.Duration func main() { var d durWithMethods // works ?? fmt.Println(d.String()) var dWM durWithoutMethods fmt.Println(dWM.String()) // doesn't compile }
このコードでは、dur、durWithMethods、および durWithoutMethods の 3 つの型を宣言します。型 dur は、構造体埋め込み時間.Duration です。タイプ durWithMethods は、dur のエイリアスとして定義されます。一方、型 durWithoutMethods は time.Duration のエイリアスです。
なぜ durWithMethods は time.Duration から String() メソッドを継承するのに、durWithoutMethods は継承しないのかという疑問が生じます。
型宣言とメソッド継承
Go では、型宣言は型定義と型エイリアスの 2 つのカテゴリに分類されます。
この場合、dur は型定義ですが、durWithMethods と durWithoutMethods は両方とも型エイリアスです。
メソッド継承への影響
dur などの型定義を使用して新しい型が作成されると、継承されたすべてが失われます方法。これは、dur が本質的に time.Duration の String() メソッドを持っていないことを意味します。ただし、durWithMethods などの型エイリアスを使用して新しい型が作成されると、基になる型のすべてのメソッド (この場合は dur.
Time.Duration および Raw Types
time.Duration は生の型であり、メソッドを持つことができないことを意味します。ただし、dur のような構造体内に埋め込むことができ、構造体がそのメソッドを継承できるようになります。型エイリアスと直接エイリアス
durWithoutMethods は直接エイリアスです。時間。期間。この型の除去動作は直接エイリアスに固有であり、durWithMethods のような型エイリアスには適用されません。結論として、durWithMethods は time.Duration の String() メソッドを継承しますが、これは時間を埋め込む型のエイリアスであるためです。 .Duration、durWithoutMethods は、生の型の直接のエイリアスであるため、このメソッドを継承しません。以上が型エイリアスは埋め込み型からメソッドを継承するのに、生の型からメソッドを継承しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。