يسمح Golang بإنشاء طريقتين أو أكثر بنفس الاسم في نفس الحزمة، ولكن يجب أن يكون مستقبلو هذه الطرق من أنواع مختلفة. هذه الميزة غير متوفرة في وظائف 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
}
دعونا نلقي نظرة على المثال التالي لفهم الأساليب التي تحمل نفس الاسم في Golang بشكل أفضل:
مثال 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()
}
نتيجة:
Name of the Student: Rohit
Branch: EEE
Language: Java
Student Marks: 50
التوضيح: في المثال أعلاه، لدينا طريقتين بنفس الاسم، أي show() ولكن مع أنواع استقبال مختلفة. هنا، تحتوي طريقة show() الأولى على s من نوع student وتحتوي طريقة show() الثانية على t من نوع teacher . وفي الدالة main() ، نقوم باستدعاء كلتا الطريقتين بمساعدة متغيرات البنية الخاصة بكل منهما. إذا حاولت إنشاء طرق show() هذه بنفس نوع المستقبل، فسوف يلقي المترجم خطأً.
مثال 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())
}
نتيجة:
Result 1: GeeksforGeeks
Result 2: 532