Golang は、Google によって開発された、厳密に型指定され、静的にコンパイルされた言語です。その簡潔な構文と効率性により、多くのインターネット企業に選ばれる言語となっています。同じ名前のメソッドは、この言語の興味深い文法上の特徴です。この記事では、同名のGolangメソッドの定義や利用シーン、注意点などを紹介します。
Golang では、同じ名前のメソッドは、同じメソッド名の複数のメソッドを参照します。これらのメソッドは、同じ型で現れることも、異なる型で現れることもあります。
同じ名前のメソッドは次の条件を満たしている必要があります:
(1) 異なる受信機タイプで定義されている必要があります;
(2) 異なるパラメータ リストが必要です;
(3) 戻り値は異なっていても構いませんが、メソッド名は同じである必要があります。
たとえば、次の構造体は同じ名前の 2 つのメソッドを定義します。
type Person struct{ Name string Age int } func (p Person) Print(){ fmt.Printf("Name: %s, Age: %d", p.Name, p.Age) } func (p *Person) Print(){ fmt.Printf("Name: %s, Age: %d", p.Name, p.Age) }
上の例では、Person 構造体は同じ名前の 2 つのメソッド Print を定義します。最初の Print メソッドはレシーバーとして person 型の値を受け取り、2 番目の Print メソッドはレシーバーとして person 型へのポインターを受け取ります。
同じ名前のメソッドの使用シナリオは通常のメソッドと似ており、ドット表記を使用してオブジェクトのメソッドを呼び出すことができます。または、型名を使用してメソッドを呼び出すこともできます。
次は、同じ名前のメソッドを使用する例です:
p := Person{ Name: "Tom", Age: 18, } p.Print() // Name: Tom, Age: 18 pp := &p pp.Print() // Name: Tom, Age: 18
上の例では、同じオブジェクトを使用して 2 つのメソッドを呼び出しました。最初の Print メソッドはレシーバーとして Person 型の値を受け取るため、p.Print() を使用してそれを呼び出すことができます。 2 番目の Print メソッドはレシーバーとしてポインター型の値を受け取るため、それを呼び出すには p へのポインターを使用する必要があります。
Golangでは同名のメソッドがサポートされていますが、使用時には以下の点に注意する必要があります。 1) 同じ名前のメソッドは、異なるレシーバ タイプで定義する必要があります;
(2) 同じ名前のメソッドのパラメータ リストを同じにすることはできません; (3) メソッドの戻り値同じ名前は異なる場合があります;
(4) 型の場合 同じ名前の 2 つのメソッドが定義されている場合、この型のメソッドを呼び出すとき、コンパイラはレシーバーの型に基づいて適切なメソッドを選択します。
上記の例の Person 構造体について、次のように定義すると:
type Person struct{ Name string Age int } func (p *Person) Print(){ fmt.Printf("Name: %s, Age: %d", p.Name, p.Age) } func (p *Person) Print(){ fmt.Printf("Name: %s, Age: %d", p.Name, p.Age) }
コンパイラは次のエラーを報告します:
redeclared method Person.Print
2 つのパラメーター List を定義したため同じ名前のメソッド。
概要
この記事では、Golang における同名のメソッドを紹介しました。同じ名前のメソッドは、異なるレシーバー タイプで同じメソッド名を定義できる興味深い構文機能です。同じ名前のメソッドを使用する場合は注意すべき制限がいくつかありますが、賢く使用するとコードの可読性と保守性が向上します。
以上が同じ名前の Golang メソッドの定義と使用法について詳しくは、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。