Golang permet de créer deux ou plusieurs méthodes portant le même nom dans le même package, mais les récepteurs de ces méthodes doivent être de types différents. Cette fonctionnalité n'est pas disponible dans les fonctions Go, ce qui signifie que vous n'êtes pas autorisé à créer des méthodes avec le même nom dans le même package, si vous essayez de le faire, le compilateur vous donnera une erreur.

Syntaxe:
func(reciver_name_1 Type) method_name(parameter_list)(return_type){
// Code
}
func(reciver_name_2 Type) method_name(parameter_list)(return_type){
// Code
}
Regardons l'exemple suivant pour mieux comprendre les méthodes portant le même nom dans Golang :
Exemple 1 :
// Chương trình Go minh họa cách
// tạo các phương thức cùng tên
package main
import "fmt"
// Tạo các cấu trúc
type student struct {
name string
branch string
}
type teacher struct {
language string
marks int
}
// Các phương thức cùng tên nhưng với
// kiểu receiver khác nhau
func (s student) show() {
fmt.Println("Name of the Student:", s.name)
fmt.Println("Branch: ", s.branch)
}
func (t teacher) show() {
fmt.Println("Language:", t.language)
fmt.Println("Student Marks: ", t.marks)
}
// Hàm chính
func main() {
// Khởi tạo các giá trị
// of the structures
val1 := student{"Rohit", "EEE"}
val2 := teacher{"Java", 50}
// Gọi các phương thức
val1.show()
val2.show()
}
Résultat:
Name of the Student: Rohit
Branch: EEE
Language: Java
Student Marks: 50
Explication : Dans l'exemple ci-dessus, nous avons deux méthodes avec le même nom, c'est-à-dire show() mais avec des types de réception différents. Ici, la première méthode show() contient s de type student et la deuxième méthode show() contient t de type teacher . Et dans la fonction main() , nous appelons les deux méthodes à l'aide de leurs variables de structure respectives. Si vous essayez de créer ces méthodes show() avec le même type de récepteur, le compilateur renverra une erreur.
Exemple 2 :
// Chương trình Go minh họa cách
// tạo các phương thức cùng tên
// với receiver không phải struct
package main
import "fmt"
type value_1 string
type value_2 int
// Tạo hàm cùng tên với
// các kiểu receiver không phải struct khác nhau
func (a value_1) display() value_1 {
return a + "forGeeks"
}
func (p value_2) display() value_2 {
return p + 298
}
// Hàm chính
func main() {
// Khởi tạo giá trị này
res1 := value_1("Geeks")
res2 := value_2(234)
// Hiện kết quả
fmt.Println("Result 1: ", res1.display())
fmt.Println("Result 2: ", res2.display())
}
Résultat:
Result 1: GeeksforGeeks
Result 2: 532