Trong Go, hàm - function là các khối mã thực hiện các tác vụ cụ thể, có thể được sử dụng lại trong toàn bộ chương trình để tiết kiệm bộ nhớ, cải thiện khả năng đọc và tiết kiệm thời gian. Hàm Golang có thể hoặc không thể trả về giá trị cho người gọi.
Những điều cần biết về hàm trong Golang
Ví dụ:
package main
import "fmt"
// multiply() nhân 2 số nguyên và trả về kết quả
func multiply(a, b int) int {
return a * b
}
func main() {
result := multiply(5, 10)
fmt.Printf("multiplication: %d", result)
}
Kết quả:
multiplication: 50
Cú pháp hàm trong Golang
func function_name(Parameter-list)(Return_type) {
// function body...
}
Khai báo hàm
Trong Go, một hàm được khai báo bằng từ khóa func, theo sau là tên, tham số và kiểu trả về tùy chọn.
Cú pháp
func function_name(Parameter-list)(Return_type) {
// function body...
}
Ví dụ hàm multiply
func multiply(a, b int) int {
return a * b
}
func: Từ khóa để khai báo một hàm.
function_name: Tên của hàm, ví dụ: nhân.
Parameter-list: a, b int—các tham số cùng với kiểu của chúng.
Return_type: int chỉ định kiểu trả về.
Gọi hàm
Để sử dụng một hàm, chỉ cần gọi hàm đó theo tên của nó với bất kỳ đối số cần thiết nào. Ở đây, multiply(5, 10) gọi hàm với 5 và 10 làm đối số.
Ví dụ
result := multiply(5, 10)
fmt.Printf("Result of multiplication: %d", result)
Đối số hàm
Go hỗ trợ hai cách để truyền tham số cho hàm: Gọi theo giá trị và Gọi theo tham chiếu. Theo mặc định, Go sử dụng gọi theo giá trị, nghĩa là các giá trị được sao chép và các thay đổi bên trong hàm không ảnh hưởng đến các biến của người gọi.
Gọi theo giá trị
Trong lệnh gọi theo giá trị, giá trị của các đối số được sao chép vào các tham số hàm, do đó thay đổi trong hàm không ảnh hưởng đến các biến gốc.
Ví dụ:
package main
import "fmt"
func multiply(a, b int) int {
a = a * 2 // chỉnh sửa bên trong hàm này
return a * b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(x, y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
Kết quả:
Before: x = 5, y = 10
multiplication: 100
After: x = 5, y = 10
Gọi theo tham chiếu
Trong lệnh gọi theo tham chiếu, các con trỏ được sử dụng để các thay đổi bên trong hàm phản ánh ở các biến của người gọi.
Ví dụ:
package main
import "fmt"
func multiply(a, b *int) int {
*a = *a * 2 // chỉnh sửa giá trị của a ở địa chỉ bộ nhớ của nó
return *a * *b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(&x, &y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
Kết quả
Before: x = 5, y = 10
multiplication: 100
After: x = 10, y = 10