الطريقة هي دالة ذات وسيط خاص يُسمى المستقبِل.
يظهر المستقبِل في قائمة وسائط خاصة به بين الكلمة المفتاحية func واسم الطريقة.
func (receiver type) MethodName(parameters) (returnTypes) {
}
لا يمكنك تعريف طريقة إلا بمستقبِل يكون نوعه معرّفًا في الحزمة نفسها التي عُرّفت فيها الطريقة.
type Person struct {
Name string
}
func (p Person) Greetings() string {
return fmt.Sprintf("Welcome %s!", p.Name)
}
s := Person{Name: "Bronson"}
fmt.Println(s.Greetings())
// Output: Welcome Bronson!
هناك نوعان من المستقبِلات: مستقبِلات القيم ومستقبِلات المؤشرات.
الطرق التي تستخدم مستقبِل قيمة تعمل على نسخة من القيمة الممرَّرة إليها، أي أن أي تعديل يُجرى على المستقبِل داخل الطريقة لا يراه المستدعي.
يمكنك تعريف طرق بمستقبِلات مؤشرات لتعديل القيمة التي يشير إليها المستقبِل. وتكون هذه التعديلات مرئية أيضًا لمستدعي الطريقة.
type rect struct {
width, height int
}
func (r *rect) squareIt() {
r.height = r.width
}
r := rect{width: 10, height: 20}
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 20
r.squareIt()
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 10
يمكنك أن تجد عدة أمثلة هنا. وألقِ نظرة أيضًا على هذا الدرس القصير حول الطرق.
تذكّر: الطريقة ليست سوى دالة ذات وسيط مستقبِل.