Các hàm variadic (hàm bất định) trong Go cho phép bạn truyền một số lượng đối số biến đổi cho một hàm. Tính năng này hữu ích khi bạn không biết trước sẽ truyền bao nhiêu đối số. Một hàm variadic của Golang chấp nhận nhiều đối số cùng loại và có thể được gọi với bất kỳ số lượng đối số nào, bao gồm cả không có.
package main
import "fmt"
// Hàm Variadic tính tổng
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println("Sum of 1, 2, 3:", sum(1, 2, 3))
fmt.Println("Sum of 4, 5:", sum(4, 5))
fmt.Println("Sum of no numbers:", sum())
}
Kết quả:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Cú pháp:
func functionName(parameters ...Type) ReturnType {
// Code
}
Trong cú pháp trên:
parameters ...Type
cho biết hàm có thể chấp nhận một số lượng biến đối số thuộc loại Type.- Bạn có thể truy cập các đối số trong hàm dưới dạng một lát cắt.
Cách dùng hàm bất định trong Golang
Dùng hàm Variadic
Khi định nghĩa một hàm variadic, bạn chỉ định loại đối số theo sau là dấu ba chấm (...) như trong ví dụ trên. Bên trong hàm, các đối số này có thể được coi là một lát cắt.
Gọi một hàm variadic
Bạn có thể gọi một hàm variadic với bất kỳ số lượng đối số nào, bao gồm cả số không. Hàm này coi các đối số là một lát cắt.
Ví dụ:
package main
import "fmt"
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println("Sum of 1, 2, 3:", sum(1, 2, 3))
fmt.Println("Sum of 4, 5:", sum(4, 5))
fmt.Println("Sum of no numbers:", sum())
}
Kết quả:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Hàm Variadic với các tham số khác
Bạn cũng có thể kết hợp các tham số variadic với các tham số thông thường trong một hàm. Tham số variadic phải luôn là tham số cuối cùng.
Ví dụ:
package main
import "fmt"
// Hàm Variadic tính tổng
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
// Hàm với tham số thông thường và variadic
func greet(prefix string, nums ...int) {
fmt.Println(prefix)
for _, n := range nums {
fmt.Println("Number:", n)
}
}
func main() {
greet("Sum of numbers:", 1, 2, 3)
greet("Another sum:", 4, 5)
greet("No numbers sum:")
}
Kết quả:
Sum of numbers:
Number: 1
Number: 2
Number: 3
Another sum:
Number: 4
Number: 5
No numbers sum:
Hạn chế của hàm Variadic
- Các hàm variadic chỉ có thể có một tham số variadic và nó phải là tham số cuối cùng.
- Bạn không thể có nhiều tham số variadic trong một định nghĩa hàm duy nhất.