cpp

Методы структур

Методы описываются точно так же как и обычные функции. Только между ключевым словом func и названием функции добавляется объявление переменной с типом структуры внутри круглых скобок:

func (<Переменная> <Структура>) <Название метода>...

Пример:

func (p Point) GetX() int {
   return p.x
}

В этом случае через переменную p доступна копия экземпляра структуры. Если нужно изменять поля структуры внутри метода, то нужно передавать указатель:

func (<Указатель> *<Структура>) <Название метода>...

Пример:

func (p *Point) SetX(n int) {
   if n < 0 {
      return
   }
   p.x = n
}

При обращении к методам используется следующий формат:

<Экземпляр структуры>.<Имя метода>([<Параметры>])

Пример использования методов приведен в листинге 11.6.

Листинг 11.6. Методы структур

package main

import "fmt"

type Point struct {
   x, y int
}

func main() {
   obj := NewPoint(10, 20)
   fmt.Println(obj.GetX()) // 10
   fmt.Println(obj.GetY()) // 20
   obj.SetX(30)
   obj.SetY(40)
   fmt.Println(obj)        // {30 40}
}
func NewPoint(x, y int) Point {
   if x < 0 || y < 0 {
      return Point{0, 0}
   }
   return Point{x, y}
}
func (p Point) GetX() int {
   return p.x
}
func (p Point) GetY() int {
   return p.y
}
func (p *Point) SetX(n int) {
   if n < 0 {
      return
   }
   p.x = n
}
func (p *Point) SetY(n int) {
   if n < 0 {
      return
   }
   p.y = n
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp