Golang cho phép tạo hai hoặc nhiều phương thức có cùng tên trong cùng một package, nhưng người nhận các phương thức này phải có kiểu khác nhau. Tính năng này không có trong hàm Go, nghĩa là bạn không được phép tạo các phương thức có cùng tên trong cùng một package, nếu cố làm vậy, trình biên dịch sẽ báo lỗi.
Cú pháp:
func(reciver_name_1 Type) method_name(parameter_list)(return_type){
// Code
}
func(reciver_name_2 Type) method_name(parameter_list)(return_type){
// Code
}
Hãy cùng tìm hiểu ví dụ sau để hiểu hơn về các phương thức cùng tên trong Golang:
Ví dụ 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()
}
Kết quả:
Name of the Student: Rohit
Branch: EEE
Language: Java
Student Marks: 50
Giải thích: Ở ví dụ trên, chúng ta có hai phương thức cùng tên, tức là show() nhưng có kiểu nhận khác nhau. Ở đây, phương thức show() đầu tiên chứa s nhận là kiểu student và phương thức show() thứ hai chứa t nhận là kiểu teacher. Và trong hàm main(), chúng ta gọi cả hai phương thức với sự trợ giúp của các biến cấu trúc tương ứng. Nếu bạn cố gắng tạo các phương thức show() này với cùng kiểu nhận, thì trình biên dịch sẽ đưa ra lỗi.
Ví dụ 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())
}
Kết quả:
Result 1: GeeksforGeeks
Result 2: 532