Methods

Методи|Methods #

// Go підтримує _методи_ визначені на типі структура.

package main

import "fmt"

// Ось - ми визначимо наш тип.
type rect struct {
	width, height int
}

// Функція `area` (площа) являє собою метод типу `rect`,
// або як кажуть з отримувачем типу *`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())

	// 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, для австрації, групування та
# іменування споріднених множин методів.