لغة Go بالأمثلة: الدوال متغيرة عدد الوسائط

يمكن استدعاء الدوال متغيرة عدد الوسائط بأي عدد من الوسائط اللاحقة. فمثلًا، fmt.Println دالة شائعة متغيرة عدد الوسائط.

package main
import "fmt"

تستقبل هذه الدالة عددًا غير محدد من الوسائط ذات النوع int.

func sum(nums ...int) {
    fmt.Print(nums, " ")
    total := 0

داخل الدالة، يكافئ نوع nums النوع []int. ويمكننا استدعاء len(nums) واجتيازه باستخدام range وغير ذلك.

    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main() {

يمكن استدعاء الدوال متغيرة عدد الوسائط بالطريقة المعتادة باستخدام وسائط منفردة.

    sum(1, 2)
    sum(1, 2, 3)

إذا كانت لديك عدة وسائط في شريحة، فمررها إلى دالة متغيرة عدد الوسائط باستخدام func(slice...) كما يلي.

    nums := []int{1, 2, 3, 4}
    sum(nums...)
}
$ go run variadic-functions.go 
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10

من الجوانب الأساسية الأخرى لدوال Go قدرتها على تكوين إغلاقات، وهو ما سنستعرضه تاليًا.

المثال التالي: .