ฟังก์ชัน Variadic ใน Goช่วยให้คุณสามารถส่งอาร์กิวเมนต์จำนวนไม่แน่นอนไปยังฟังก์ชันได้ คุณสมบัตินี้มีประโยชน์เมื่อคุณไม่ทราบล่วงหน้าว่าคุณจะผ่านอาร์กิวเมนต์จำนวนเท่าใด ฟังก์ชันGolang Variadic ยอมรับอาร์กิวเมนต์หลายตัวที่มีประเภทเดียวกัน และสามารถเรียกใช้ด้วยอาร์กิวเมนต์ได้จำนวนเท่าใดก็ได้ รวมถึงไม่มีเลยด้วยซ้ำ

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())
}
ผลลัพธ์:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
รูปแบบประโยค :
func functionName(parameters ...Type) ReturnType {
// Code
}
ในไวยากรณ์ข้างต้น:
parameters ...Typeระบุว่าฟังก์ชันสามารถรับอาร์กิวเมนต์ชนิด Type ได้จำนวนตัวแปร
- คุณสามารถเข้าถึงอาร์กิวเมนต์ในฟังก์ชันเป็นสไลซ์ได้
วิธีใช้ฟังก์ชันที่ไม่แน่นอนใน Golang
การใช้ฟังก์ชัน Variadic
เมื่อกำหนดฟังก์ชัน variadic คุณต้องระบุประเภทอาร์กิวเมนต์ตามด้วยจุดไข่ปลา (...) เหมือนในตัวอย่างข้างต้น ภายในฟังก์ชันนั้น อาร์กิวเมนต์เหล่านี้สามารถคิดได้ว่าเป็นสไลซ์
การเรียกใช้ฟังก์ชัน variadic
คุณสามารถเรียกใช้ฟังก์ชัน variadic ได้ด้วยอาร์กิวเมนต์จำนวนเท่าใดก็ได้ รวมถึงศูนย์ด้วย ฟังก์ชันนี้จะปฏิบัติต่ออาร์กิวเมนต์เป็นสไลซ์
ตัวอย่างเช่น:
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())
}
ผลลัพธ์:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
ฟังก์ชัน Variadic ที่มีพารามิเตอร์ต่างกัน
คุณสามารถรวมพารามิเตอร์ Variadic กับพารามิเตอร์ปกติในฟังก์ชันได้ พารามิเตอร์ Variadic จะต้องเป็นพารามิเตอร์สุดท้ายเสมอ
ตัวอย่างเช่น:
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:")
}
ผลลัพธ์:
Sum of numbers:
Number: 1
Number: 2
Number: 3
Another sum:
Number: 4
Number: 5
No numbers sum:
ข้อจำกัดของฟังก์ชัน Variadic
- ฟังก์ชัน Variadic สามารถมีพารามิเตอร์ Variadic ได้เพียงตัวเดียวและจะต้องเป็นพารามิเตอร์สุดท้าย
- คุณไม่สามารถมีพารามิเตอร์ variadic หลายตัวในนิยามฟังก์ชันเดียวได้