لغة Go بالأمثلة: الأساليب (method)

تدعم Go تعريف الأساليب على أنواع الهياكل.

package main
import "fmt"
type rect struct {
    width, height int
}

للأسلوب area نوع مستقبِل هو *rect.

func (r *rect) area() int {
    return r.width * r.height
}

يمكن تعريف الأساليب على أنواع مستقبِلات من المؤشرات أو القيم. إليك مثالًا على مستقبِل من نوع قيمة.

func (r rect) perim() int {
    return 2*r.width + 2*r.height
}
func main() {
    r := rect{width: 10, height: 5}

نستدعي هنا الأسلوبين المعرّفين لهيكلنا.

    fmt.Println("area: ", r.area())
    fmt.Println("perim:", r.perim())

تتولى Go تلقائيًا التحويل بين القيم والمؤشرات عند استدعاء الأساليب. قد ترغب في استخدام نوع مستقبِل من المؤشرات لتجنب النسخ عند استدعاء الأسلوب، أو للسماح للأسلوب بتغيير الهيكل المستقبِل.

    rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim:", rp.perim())
}
$ go run methods.go 
area:  50
perim: 30
area:  50
perim: 30

سنستعرض تاليًا آلية Go لتجميع مجموعات الأساليب المترابطة وتسميتها: الواجهات.

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