72 lines
1.3 KiB
Markdown
72 lines
1.3 KiB
Markdown
---
|
|
title: Go Methods
|
|
localeTitle: Vá métodos
|
|
---
|
|
## Vá métodos
|
|
|
|
Tipos de Golang podem ter métodos. Um método é uma função com um argumento especial, o _receptor_ .
|
|
|
|
```go
|
|
type Rectangle struct {
|
|
height, width int64
|
|
}
|
|
|
|
func (r Receiver) getArea() int64 {
|
|
return r.height * r.height
|
|
}
|
|
|
|
r := Rectangle{10, 20}
|
|
r.getArea() // 200
|
|
```
|
|
|
|
Aqui, o tipo `Rectangle` tem um método chamado `getArea` que retorna a área do retângulo. O receptor aqui é `r` .
|
|
|
|
Este código é equivalente a:
|
|
|
|
```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
|
|
```
|
|
|
|
Agora, o método getArea recebe `r` como um argumento, em vez de um receptor. A funcionalidade é equivalente.
|
|
|
|
### Receptor de ponteiro
|
|
|
|
Você pode passar um ponteiro como um receptor:
|
|
|
|
```go
|
|
type MyInt int64
|
|
|
|
func (m *MyInt) setToZero() {
|
|
*m = MyInt(0)
|
|
}
|
|
|
|
m := MyInt(10)
|
|
m.setToZero() // m == 0
|
|
```
|
|
|
|
### Métodos de extensão
|
|
|
|
Se você quiser criar um método em um tipo definido em outro pacote, por exemplo, `int` você pode usar um simples invólucro como este:
|
|
|
|
```go
|
|
type MyInt int64
|
|
|
|
func (m MyInt) add10() int64 {
|
|
return m + 10
|
|
}
|
|
|
|
m := MyInt(10)
|
|
m.add10() // 20
|
|
```
|
|
|
|
#### Mais Informações:
|
|
|
|
https://tour.golang.org/methods/1 |