Go by Example ไธญๆ–‡็‰ˆ: ๆ–นๆณ•

Go ๆ”ฏๆŒไธบ็ป“ๆž„ไฝ“็ฑปๅž‹ๅฎšไน‰ๆ–นๆณ•(methods) ใ€‚

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

่ฟ™้‡Œ็š„ area ๆ˜ฏไธ€ไธชๆ‹ฅๆœ‰ *rect ็ฑปๅž‹ๆŽฅๆ”ถๅ™จ(receiver)็š„ๆ–นๆณ•ใ€‚

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 ๅฏนๆ–นๆณ•้›†่ฟ›่กŒๅ‘ฝๅๅ’Œๅˆ†็ป„็š„ๅฆไธ€ๆœบๅˆถ๏ผšๆŽฅๅฃใ€‚

ไธ‹ไธ€ไธชไพ‹ๅญ: ๆŽฅๅฃ