在Go語言中,允許在同一包中創(chuàng)建兩個或多個具有相同名稱的方法,但是這些方法的接收者必須具有不同的類型。該功能在Go函數(shù)中不可用,這意味著不允許您在同一包中創(chuàng)建相同名稱的方法,如果嘗試這樣做,則編譯器將拋出錯誤。
語法:
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" //創(chuàng)建結(jié)構(gòu)體 type student struct { name string branch string } type teacher struct { language string marks int } //名稱相同的方法,但有不同類型的接收器 func (s student) show() { fmt.Println("學(xué)生姓名:", s.name) fmt.Println("Branch: ", s.branch) } func (t teacher) show() { fmt.Println("Language:", t.language) fmt.Println("Student Marks: ", t.marks) } func main() { // 初始化結(jié)構(gòu)體的值 val1 := student{"Rohit", "EEE"} val2 := teacher{"Java", 50} //調(diào)用方法 val1.show() val2.show() }
輸出:
學(xué)生姓名: Rohit Branch: EEE Language: Java Student Marks: 50
用法說明:在上面的示例中,我們有兩個相同的名稱方法,即show(),但接收器的類型不同。這里,第一個show()方法包含s student類型的接收者,第二個show()方法包含t teacher類型的接收者。在main()函數(shù)中,我們借助各自的結(jié)構(gòu)體變量來調(diào)用這兩種方法。如果嘗試使用相同類型的接收器創(chuàng)建此show()方法,則編譯器將拋出錯誤。
范例2:
//創(chuàng)建相同名稱的方法 //非結(jié)構(gòu)類型的接收器 package main import "fmt" type value_1 string type value_2 int //創(chuàng)建具有相同名稱的函數(shù) //不同類型的非結(jié)構(gòu)接收器 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("nhooo") res2 := value_2(234) // 打印顯示結(jié)果 fmt.Println("Result 1: ", res1.display()) fmt.Println("Result 2: ", res2.display()) }
輸出:
Result 1: (cainiaoplus.com) Result 2: 532