گو از متدهای تعریف شده روی انواع سازه ها پشتیبانی میکند.
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
در قسمت بعدی ما به مکانیزم گو برای گروه بندی و نامگذاری مجموعه های متفاوتی از متدها نگاهی میندازیم: اینترفیس ها.
<<سازه ها----------------------------------اینترفیس ها>>