English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go言語では、同一のパッケージ内で名前が同じ二つのまたはそれ以上のメソッドを作成することができますが、これらのメソッドの受信者異なるタイプを持たなければなりません。この機能はGoの関数では使用できません。これは、同じ名前のメソッドを同一のパッケージで作成することは許可されていないということを意味し、そのようにしようとするとコンパイラがエラーを返します。
文法:
func(reciver_name_1 Type) method_name(parameter_list)(return_type){ // Code } func(reciver_name_2 Type) method_name(parameter_list)(return_type){ // Code }
この概念について例を用いて説明しましょう:
例1:
package main import "fmt" //構造体を作成する type student struct { name string branch string } type teacher struct { language string marks int } //同じ名前のメソッドで異なる型の受信者 func (s student) show() { fmt.Println("学生名:", s.name) fmt.Println("Branch: ", s.branch) } func (t teacher) show() { fmt.Println("Language:", t.language) fmt.Println("Student Marks: ", t.marks) } func main() { // 構造体の値を初期化する val1 := student{"Rohit", "EEE"} val2 := teacher{"Java", 50} //メソッドを呼び出す val1.show() val2.show() }
出力:
学生名: Rohit Branch: EEE Language: Java Student Marks: 50
使用方法:上記の例では、同じ名前のメソッドが二つありますが、show()、受信者の型が異なります。ここで、最初のshow()メソッドはs student型の受信者を含んでおり、二つ目のshow()メソッドはt teacher型の受信者を含んでいます。以下のmain()関数内で、それぞれの構造体変数を使ってこれらのメソッドを呼び出します。同じ型の受信者でこのメソッドを作成しようとすると、エラーが発生します。show()同じ名前のメソッドがある場合、コンパイラはエラーを投げ出します。
例2:
//同じ名前のメソッドを作成する //非構造体型の受信者 package main import "fmt" type value_1 string type value_2 int //同じ名前の関数を作成する //異なる型の非構造体受信者 func (a value_1) display() value_1 { return a + ".com" } func (p value_2) display() value_2 { return p + 298 } func main() { //初期値 res1 := value_1("w3codebox") res2 := value_2(234) // 表示結果を印字する fmt.Println("Result" 1: ", res1.display()) fmt.Println("Result" 2: ", res2.display()) }
出力:
結果 1: oldtoolbag.com 結果 2: 532