Các phương thức cùng tên trong Golang

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.

Phương thức cùng tên trong Golang

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
Thứ Hai, 14/04/2025 09:30
31 👨 288
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng