19.آموزش 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}

اینجا ما 2 متد تعریف شده روی سازه خودمون رو فراخوانی میکنیم.

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

گو به صورت خودکار تبدیل بین مقادیر و اشاره گرها را برای فراخوانی متدها انجام می دهد. شما ممکنه از یک نوع اشاره گر گیرنده برای جلوگیری از کپی کردن روی فراخوانی متدها استفاده کنید یا به متدها برای تغییر دادن سازه های دریافتی اجازه دهید.

   rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim:", rp.perim())
}

اجرای این برنامه

$ go run methods.go 
area:  50
perim: 30
area:  50
perim: 30

در قسمت بعدی ما به مکانیزم گو برای گروه بندی و نامگذاری مجموعه های متفاوتی از متدها نگاهی میندازیم: اینترفیس ها.

<<سازه ها----------------------------------اینترفیس ها>>