في Go، الوظائف هي كتل من التعليمات البرمجية التي تؤدي مهام محددة، والتي يمكن إعادة استخدامها في جميع أنحاء البرنامج لتوفير الذاكرة وتحسين قابلية القراءة وتوفير الوقت. قد تقوم وظائف Golang بإرجاع قيمة إلى المتصل وقد لا تقوم بذلك.

أشياء يجب معرفتها حول الوظائف في Golang
على سبيل المثال:
package main
import "fmt"
// multiply() nhân 2 số nguyên và trả về kết quả
func multiply(a, b int) int {
return a * b
}
func main() {
result := multiply(5, 10)
fmt.Printf("multiplication: %d", result)
}
نتيجة:
multiplication: 50
بناء الجملة الوظيفية في جولانج
func function_name(Parameter-list)(Return_type) {
// function body...
}
إعلان الوظيفة
في Go، يتم إعلان الوظيفة باستخدام الكلمة الأساسية func، متبوعة باسم ومعلمات ونوع إرجاع اختياري.
بناء الجملة
func function_name(Parameter-list)(Return_type) {
// function body...
}
مثال على دالة الضرب
func multiply(a, b int) int {
return a * b
}
func: كلمة أساسية للإعلان عن وظيفة.
function_name: اسم الوظيفة، على سبيل المثال ضاعف.
قائمة المعلمات: a، b int—المعلمات مع أنواعها.
Return_type: int يحدد نوع الإرجاع.
وظيفة الاتصال
لاستخدام دالة ما، قم ببساطة باستدعاء الدالة حسب اسمها مع أي وسيطات ضرورية. هنا، تقوم الدالة multiply(5, 10) باستدعاء الدالة باستخدام 5 و 10 كحجج.
على سبيل المثال
result := multiply(5, 10)
fmt.Printf("Result of multiplication: %d", result)
حجج الدالة
يدعم Go طريقتين لتمرير المعلمات إلى الوظائف: الاستدعاء بالقيمة والاستدعاء بالرجوع. بشكل افتراضي، يستخدم Go استدعاء بالقيمة، مما يعني أن القيم يتم نسخها والتغييرات داخل الوظيفة لا تؤثر على متغيرات المتصل.
الاتصال حسب القيمة
في الاستدعاء حسب القيمة، يتم نسخ قيم الوسائط إلى معلمات الدالة، وبالتالي فإن التغييرات في الدالة لا تؤثر على المتغيرات الأصلية.
على سبيل المثال:
package main
import "fmt"
func multiply(a, b int) int {
a = a * 2 // chỉnh sửa bên trong hàm này
return a * b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(x, y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
نتيجة:
Before: x = 5, y = 10
multiplication: 100
After: x = 5, y = 10
الاتصال بالإشارة
في الاستدعاء بالرجوع، يتم استخدام المؤشرات بحيث تنعكس التغييرات داخل الوظيفة في متغيرات المتصل.
على سبيل المثال:
package main
import "fmt"
func multiply(a, b *int) int {
*a = *a * 2 // chỉnh sửa giá trị của a ở địa chỉ bộ nhớ của nó
return *a * *b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(&x, &y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
نتيجة
Before: x = 5, y = 10
multiplication: 100
After: x = 10, y = 10