تتيح لك الدوال المتنوعة في Go تمرير عدد متغير من الوسائط إلى دالة. تكون هذه الميزة مفيدة عندما لا تعرف مسبقًا عدد الحجج التي ستمررها. تقبل دالة Golang المتغيرة وسيطات متعددة من نفس النوع ويمكن استدعاؤها بأي عدد من الوسائط، بما في ذلك عدم وجود أي منها .

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
استخدام الدوال المتغيرة
عند تعريف دالة متغيرة، يمكنك تحديد نوع الوسيطة متبوعًا بعلامة حذف (...) كما في المثال أعلاه. داخل الدالة، يمكن اعتبار هذه الحجج بمثابة شريحة.
استدعاء دالة متغيرة
يمكنك استدعاء دالة متغيرة بأي عدد من الوسائط، بما في ذلك الصفر. تعامل هذه الوظيفة الوسائط على أنها شريحة.
على سبيل المثال:
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
دالة متغيرة ذات معلمات مختلفة
يمكنك أيضًا دمج المعلمات المتغيرة مع المعلمات العادية في الدالة. يجب أن تكون المعلمات المتغيرة دائمًا هي المعلمة الأخيرة.
على سبيل المثال:
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:
حدود الدوال المتغيرة
- لا يمكن للوظائف المتغيرة أن تحتوي إلا على معلمة متغيرة واحدة ويجب أن تكون المعلمة الأخيرة.
- لا يمكنك الحصول على معلمات متغيرة متعددة في تعريف وظيفة واحدة.