В Go всеки вид структура може да има собствени методи1.
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("площ: ", r.area())
fmt.Println("обиколка:", r.perim())
Го управлява автоматично превръщането между стойност и указател при извикване на методи. Може да искате да използвате получател указател, за да избегнете копирането на данни при извикване на методи или, за да позволите на метод да променя получаващата структура.
rp := &r
fmt.Println("area: ", rp.area())
fmt.Println("perim:", rp.perim())
}
$ go run methods.go
площ: 50
обиколка: 30
area: 50
perim: 30
В следващия пример ще разгледаме как в Го се групират набори от методи за да определим взаимодействия1.
Следващ пример: Взаимодействия.