وظائف متنوعة

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

func hello(friends ...string) {
    // ...
}

من السهل جدًا التعرف عليه من النقاط الثلاث....

يمكننا الاتصالhello()مثله:

hello("tony", "mark", "mary", "joe")

أو:

hello("tony")

أو بعدد لا حصر له من السلاسل.

مثال من المكتبة القياسية:append()

appendهي دالة متغيرة ، تُعرّف على أنها

func append(slice []Type, elems ...Type) []Type

الاستخدام الشائع هو عند إزالة عنصر في الموضعiمن مجموعةa.

a = append(a[:i], a[i+1:]...)

ينشئ هذا السطر شريحة جديدة عن طريق إزالة العنصر في الموضعiفيa، بدمج العناصر من 0 إلى i (غير مدرجة) ، ومن i + 1 حتى النهاية.

ما هو الغرض من...؟

appendيقبل شريحة كوسيطة أولى ، وعدد غير محدود من الوسائط ، وكلها من النوعقابلة للتعيينلنوع عناصرها.

جاري الكتابة

a = append(a[:i], a[i+1:]...)

يعادل الكتابة

a = append(a[:i], a[i+1], a[i+2], a[i+3], a[i+4]) //and so on, until the end of the slice.

استخدامa[i+1:]...هي في الأساس صيغة مختصرة ، كما توضح مواصفات Go فيhttps://golang.org/ref/spec#Passing_arguments_to_..._parameters:

إذا كانت f متغيرة مع معلمة نهائية p من النوع… T ، فإن النوع p ضمن f يكون مكافئًا للنوع [] T. إذا تم استدعاء f بدون وسيطات فعلية لـ p ، فإن القيمة التي تم تمريرها إلى p هي لا شيء. وإلا ، فإن القيمة التي تم تمريرها هي شريحة جديدة من النوع [] T مع مصفوفة أساسية جديدة تكون عناصرها المتتالية هي الوسيطات الفعلية ، والتي يجب تخصيصها جميعًا لـ T

ملعب


المزيد من دروس Go: