freeCodeCamp/guide/russian/go/methods/index.md

72 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Go Methods
localeTitle: Методы Go
---
## Методы Go
Типы Голанга могут иметь методы. Метод - это функция со специальным аргументом - _приемником_ .
```go
type Rectangle struct {
height, width int64
}
func (r Receiver) getArea() int64 {
return r.height * r.height
}
r := Rectangle{10, 20}
r.getArea() // 200
```
Здесь тип `Rectangle` имеет метод `getArea` который возвращает область прямоугольника. Приемник здесь `r` .
Этот код эквивалентен:
```go
type Rectangle struct {
height, width int64
}
func getArea(r Receiver) int 64{
return r.height * r.height
}
r := Rectangle{10, 20}
getArea(r) // 200
```
Теперь метод getArea получает `r` в качестве аргумента вместо получателя. Функциональность эквивалентна.
### Приемник указателя
Вы можете передать указатель в качестве получателя:
```go
type MyInt int64
func (m *MyInt) setToZero() {
*m = MyInt(0)
}
m := MyInt(10)
m.setToZero() // m == 0
```
### Методы расширения
Если вы хотите создать метод для типа, определенного в другом пакете, например `int` вы можете использовать простую оболочку, например:
```go
type MyInt int64
func (m MyInt) add10() int64 {
return m + 10
}
m := MyInt(10)
m.add10() // 20
```
#### Дополнительная информация:
https://tour.golang.org/methods/1