Aula 20 – Tutorial Golang – Métodos

Aula 20 – Tutorial Golang – Métodos

Tutorial Golang - Methods

Tutorial Golang – Métodos

Página principal do blog

Todas as aulas desse curso

Aula 19                        Aula 21

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

PIX para doações

PIX Nubank

PIX Nubank

Se quiser copiar o código do PIX:

00020126580014BR.GOV.BCB.PIX013643c5f950-535b-4658-b91f-1f1d135fe4105204000053039865802BR5925Antonio Cavalcante de Pau6009SAO PAULO61080540900062070503***6304946B

Aula 20 – Tutorial Golang – Métodos

Métodos

Go suporta métodos definidos em structs.


type rect struct {
  width, height int
}

Este método de area() tem um tipo de receptor *rect, ou seja, um ponteiro para uma estrutura rect, de retângulo.


func (r *rect) area() int {
  return r.width * r.height
}

Os métodos podem ser definidos para tipos de ponteiro ou cópia de valor.

Aqui um exemplo de um receptor por cópia de valor.


func (r rect) perim() int {
  return 2*r.width + 2*r.height
}

Já dentro da main(), definimos as medidas de largura e altura, e chamamos os 2 métodos definidos para nossa struct.


r := rect{width: 10, height: 5}
fmt.Println("Área: ", r.area())
fmt.Println("Perímetro: ", r.perim())

Go lida automaticamente com a conversão entre valores e ponteiros para chamadas de método.

Você pode querer usar um tipo de receptor de ponteiro para evitar a cópia em chamadas de método ou para permitir que o método altere a estrutura de recebimento.


rp := &r
fmt.Println("Área: ", rp.area())
fmt.Println("Perímetro: ", rp.perim())

Código completo


package main

import "fmt"

type rect struct {
	width, height int
}

func (r *rect) area() int {
  fmt.Printf("Endereço de r dentro do método area: %p\n", r)
  return r.width * r.height
}

func (r rect) perim() int {
  fmt.Printf("Endereço de r dentro do método perim: %p\n", &r)
  return 2*r.width + 2*r.height
}

func main() {
  r := rect{width: 10, height: 5}
  fmt.Printf("Endereço de r dentro do método main: %p\n", &r)
  fmt.Println("Área: ", r.area())
  fmt.Println("Perímetro :", r.perim())

  rp := &r
  fmt.Println("Área: ", rp.area())
  fmt.Println("Perímetro: ", rp.perim())
}

E pra executar é só entrar na pasta onde tá o arquivo methods.go

go run methods.go

Saída:

area: 50
perim: 30
area: 50
perim: 30

É isso pessoal, fico por aqui.

Nos vemos na próxima aula, até mais. 🙂

Página principal do blog

Todas as aulas desse curso

Aula 19                        Aula 21

página do Código Fluente no
Facebook

Esse é o link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>