Orientação a objetos na linguagem Go \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 14 Horas 

 49 Min 

 47 Seg 

   Tempo restante da oferta: 14 49 47 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Orientação a objetos na linguagem Go  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) [ Go ](https://www.treinaweb.com.br/blog/categoria/go) 

# Orientação a objetos na linguagem Go

 Neste artigo iremos aprender como podemos utilizar a orientação a objetos na linguagem Go, usando structs e pointer receivers.

 [ Cleyson Lima ](https://www.treinaweb.com.br/blog/autor/cleyson-lima) 4 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang.jpg)  

O paradigma orientado a objetos traz boas vantagens, como, reutilização de código, legibilidade e manutenibilidade do código, natural modularização e produção de código mais acessível, já que as estruturas criadas geralmente representam aspectos também existentes no mundo real, nesse artigo iremos falar sobre a orientação a objetos na linguagem Go.

Quando lidamos com o paradigma orientado a objetos, acabamos criando diversas unidades de software através de estruturas chamadas classes. A partir destas classes, podemos criar estruturas chamadas objetos, estruturas estas que interagem entre si. Esse é o motivo pelo qual o paradigma é chamado de orientação a objetos: todas as interações necessárias para que o software funcione ocorrem por mensagens e comandos trocados entre estes objetos.

Caso você esteja iniciando e não conheça muita coisa sobre orientação a objetos, indico primeiramente a leitura do artigo [“Os pilares da orientação a objetos”](https://www.treinaweb.com.br/blog/os-pilares-da-orientacao-a-objetos/).

[  ![Lógica Orientada a Objetos - Primeiros Passos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/logica-oo.svg)   Curso Lógica Orientada a Objetos - Primeiros Passos Conhecer o curso ](https://www.treinaweb.com.br/curso/logica-orientada-a-objetos-primeiros-passos)

## Mas a linguagem Go suporta o paradigma orientado a objetos?

Essa pergunta é um tanto quanto polemica, algumas pessoas irão responder que não, outras irão responder que sim e algumas vão responder que depende. Mas aqui vamos utilizar o posicionamento da própria Google em relação a essa pergunta.

[No FAQ (Frequently Asked Questions)](https://go.dev/doc/faq#Is_Go_an_object-oriented_language), existe um tópico dedicado a essa questão. Eles dizem que a Golang possui um suporte limitado a orientação a objetos, ou seja, a linguagem possui suporte a orientação a objetos, porém, não da mesma maneira que estamos acostumados em outras linguagens.

## Structs, as classes do Go

Quando falamos de orientação a objetos na linguagem Go, nós não temos o conceito de classes como estamos acostumados, o que existe no Go são as structs.

Em Go, as structs são tipos de dados compostos que permitem agrupar diferentes tipos de valores relacionados em um único objeto. Uma struct em Go é definida usando a palavra-chave `type` seguida pelo nome da struct e uma lista de campos, que consistem em um nome e um tipo. Por exemplo:

```go
type Pessoa struct {
    Nome  string
    Idade int
    Email string
}

```

Nesse exemplo, criamos uma struct chamada `Pessoa` que possui três campos: `Nome`, `Idade` e `Email`. Cada campo tem um tipo específico, como `string` e `int`.

Veja que as structs podem ser diretamente relacionadas com as classes da orientação a objetos, essa forma de agregar diretamente tipos de dados para formar um novo dado pode ser relacionado diretamente com uma classe e seus atributos.

### Instanciando Structs

Uma vez que uma struct é definida, podemos criar variáveis desse tipo, preenchê-las com valores e acessar os campos usando a notação de ponto. Por exemplo:

```go
func main() {
    pessoa := Pessoa{
        Nome:  "João",
        Idade: 25,
        Email: "joao@example.com",
    }

    fmt.Println("Nome:", pessoa.Nome)
    fmt.Println("Idade:", pessoa.Idade)
    fmt.Println("Email:", pessoa.Email)
}

```

Neste exemplo, criamos uma variável `pessoa` do tipo `Pessoa` e atribuímos valores aos seus campos usando a sintaxe de inicialização de struct. Em seguida, podemos acessar os campos da struct usando a notação de ponto.

No Go não temos a mesma ideia de método construtor como temos nas classes, nós devemos informar quais os “atributos” da struct queremos atribuir seus respectivos valores.

As structs em Go são tipos por valor, o que significa que quando atribuímos uma struct a outra variável ou passamos uma struct como argumento para uma função, ocorre uma cópia dos valores dos campos. No entanto, também é possível trabalhar com ponteiros para structs se quisermos modificar o valor original da struct em uma função ou compartilhá-la eficientemente entre diferentes partes do código.

## Pointer receivers, os métodos do Go

[  ![Go Básico](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/go.svg)   Curso Go Básico Conhecer o curso ](https://www.treinaweb.com.br/curso/go-basico)

Na orientação a objetos as classes possuem dois recursos principais, os atributos e os métodos. Sendo que geralmente associamos os atributos como características da classe e os métodos como comportamentos da classe.

Até o momento vimos que com as structs podemos facilmente ter o mesmo comportamento de uma classe com os seus atributos, mas como ficam os métodos?

No Go podemos utilizar um recurso chamado de pointer receivers (ponteiro receptor) para termos o mesmo comportamento de uma método.

Em Go, os “pointer receivers” são um conceito relacionado aos métodos definidos em structs (ou tipos personalizados). Um “receiver” é um parâmetro especial de um método que define em qual tipo o método é definido e como ele pode ser chamado.

Existem dois tipos de receivers em Go: “value receivers” (receptores de valor) e “pointer receivers” (receptores de ponteiro). Quando um método é definido com um “pointer receiver”, isso significa que o método opera no ponteiro para a instância da struct em vez de uma cópia do valor. Isso permite que o método modifique diretamente o valor original da struct.

### Criando e usando os pointer receivers

Para entender melhor, vamos considerar um exemplo com uma struct chamada `Pessoa` que possui um método definido com um “pointer receiver”:

```go
type Pessoa struct {
    Nome string
    Idade int
}

func (p *Pessoa) AtualizarIdade(novaIdade int) {
    p.Idade = novaIdade
}

```

Neste exemplo, definimos um método chamado `AtualizarIdade` na struct `Pessoa`. Observe que o receiver `p` é um ponteiro para a struct `Pessoa`. Isso indica que o método `AtualizarIdade` opera diretamente no valor da struct referenciada pelo ponteiro.

Agora podemos criar uma instância da struct `Pessoa` e chamar o método `AtualizarIdade`:

```go
func main() {
    pessoa := Pessoa{
        Nome: "Maria",
        Idade: 30,
    }

    fmt.Println("Idade antes da atualização:", pessoa.Idade)
    pessoa.AtualizarIdade(35)
    fmt.Println("Idade após a atualização:", pessoa.Idade)
}

```

Neste exemplo, criamos uma variável `pessoa` do tipo `Pessoa` e atribuímos valores aos seus campos. Em seguida, chamamos o método `AtualizarIdade` na variável `pessoa`, passando o novo valor da idade como argumento. Como o método é um “pointer receiver”, ele pode modificar diretamente o valor do campo `Idade` na instância da struct original.

Portanto, ao executar o código acima, o valor do campo `Idade` da struct `pessoa` é atualizado para 35.

É importante observar que, ao chamar um método com um “pointer receiver”, Go permite que você chame o método diretamente em um ponteiro para a struct (como `pessoa.AtualizarIdade(35)`) ou em uma variável do tipo da struct (como `(&pessoa).AtualizarIdade(35)`). Ambas as formas são equivalentes e o compilador de Go faz a conversão implicitamente quando necessário.

O uso de “pointer receivers” é útil quando você precisa modificar o valor original da struct dentro de um método. Isso evita a cópia desnecessária de dados e permite maior eficiência e flexibilidade na manipulação dos valores.

## Conclusão

Em conclusão, mesmo que a linguagem Go não siga o paradigma orientado a objetos da mesma forma que outras linguagens, ela oferece suporte limitado a esse paradigma por meio do uso de structs e pointer receivers.

As structs do Go podem ser comparadas às classes, permitindo agrupar diferentes tipos de valores relacionados em um único objeto. Com as structs, podemos criar variáveis, preenchê-las com valores e acessar seus campos. Além disso, os pointer receivers permitem definir métodos que operam diretamente no valor original da struct, proporcionando comportamentos semelhantes aos métodos de uma classe.

Assim, embora Go possua uma abordagem única para a orientação a objetos, é possível obter benefícios semelhantes, como reutilização de código e modularização, por meio desses recursos da linguagem.

Por fim, caso queira aprender mais sobre a Go e sua infinidade de recursos saiba que aqui na [TreinaWeb](https://www.treinaweb.com.br/) temos o curso [Go Básico](https://www.treinaweb.com.br/curso/go-basico) que possui **05h30 de vídeo** e um total de **37 exercícios**.

Veja quais são os tópicos abordados durante o curso Go Básico:

- Compreender a sintaxe básica da Golang;
- Compreender conceitos básicos envolvidos na Go, como ponteiros de memória;
- Utilizar as estruturas básicas da linguagem, como declaração de variáveis;
- Utilizar as principais estruturas de conjuntos da Go, como arrays, slices e maps;
- Entender as principais funções na Golang que são built-in, como make(), new(), panic(), recover() e defer;
- Organizar o código em pacotes e utilizar os principais pacotes disponibilizados pela linguagem;
- Entender como podemos utilizar concorrência com a Golang, inclusive com técnicas como os channels;
- Entender o que são as structs na Go e como podemos utilizar um pouco de orientação a objetos com a linguagem;
- Realizar operações de I/O no sistema operacional, como a criação e escrita de arquivos.

- [ #Orientação a objetos ](https://www.treinaweb.com.br/blog/tag/orientacao-a-objetos)
- [ #go ](https://www.treinaweb.com.br/blog/tag/go)
- [ #golang ](https://www.treinaweb.com.br/blog/tag/golang)
- [ #structs ](https://www.treinaweb.com.br/blog/tag/structs)
- [ #pointer receivers ](https://www.treinaweb.com.br/blog/tag/pointer-receivers)

Autor

 ![Cleyson Lima](//secure.gravatar.com/avatar/db30efb102ffa5d5204cebe12060b111?d=mm)

## Cleyson Lima

 Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleyson-lima)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Guias ](https://www.treinaweb.com.br/blog/categoria/guias) 

     3 anos atrás

    ##  [ Guia da linguagem Go ](https://www.treinaweb.com.br/blog/guia-da-linguagem-go) 

     Nesse guia de Go você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação Go. Acesse agora mesmo!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Estruturas condicionais e de repetição na Go ](https://www.treinaweb.com.br/blog/estruturas-condicionais-e-de-repeticao-na-go) 

     Veremos nesse artigo sobre quais são e como podemos utilizar as estruturas condicionais e as estruturas de repetição na linguagem Go

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Conhecendo variáveis e constantes na Golang ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-na-golang) 

     Conheça neste artigo os tipos de dados presentes e a sintaxe para que possamos declarar variáveis e constantes na Golang.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Entendendo ponteiros na Golang ](https://www.treinaweb.com.br/blog/entendendo-ponteiros-na-golang) 

     Neste artigo veremos sobre os ponteiros na Golang. Vamos entender o que são ponteiros, quais suas vantagens e desvantagens e como utilizá-los.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Principais estruturas de dados na Golang ](https://www.treinaweb.com.br/blog/principais-estruturas-de-dados-na-golang) 

     Neste artigo iremos conhecer quais são, como podemos declarar e como utilizar as principais estruturas de dados na Golang.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ O que é e como começar com Go (Golang)? ](https://www.treinaweb.com.br/blog/o-que-e-e-como-comecar-com-golang) 

     Neste artigo vamos ter o contato inicial com a linguagem Go (Golag) e aprender um pouco sobre as suas características e como funciona a sua sintaxe.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Trabalhando com funções na Golang ](https://www.treinaweb.com.br/blog/trabalhando-com-funcoes-na-golang) 

     Neste artigo vamos aprender sobre as funções na Golang. Veremos o que são, qual a sua importância em nossos programas e como utilizá-las.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/06/18155804/sistemas-operacionais-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ Concorrência, Paralelismo, Processos, Threads, programação síncrona e assíncrona ](https://www.treinaweb.com.br/blog/concorrencia-paralelismo-processos-threads-programacao-sincrona-e-assincrona) 

     Concorrência, paralelismo, processos, threads, programação síncrona e assíncrona, são assuntos que permeiam o dia a dia dos desenvolvedores. A ideia desse artigo é descomplicar um pouco o que esses conceitos significam e como eles se relacionam.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/05/como-instalar-o-csharp-e-nosso-primeiro-exemplo-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     4 anos atrás

    ##  [ Orientação a objetos no C# ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-no-csharp) 

     Aprenda como trabalhar com classes, atributos, métodos e objetos no C# e aumente seus conhecimentos nessa linguagem incrível!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/JAVA-ORIENTACAO-OBJETOS-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Orientação a objetos em Java ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-em-java) 

     É perceptível a vocação do Java para estruturas orientadas a objetos. Veremos um pouco mais sobre neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/10/15020508/rsz_bridge-246913_1920-400x280.png)  [ Orientação a Objetos ](https://www.treinaweb.com.br/blog/categoria/orientacao-a-objetos) 

     8 anos atrás

    ##  [ Os pilares da orientação a objetos ](https://www.treinaweb.com.br/blog/os-pilares-da-orientacao-a-objetos) 

     O paradigma orientado a objetos é um dos mais utilizados no mercado de trabalho. Neste artigo, veremos os pilares da orientação a objetos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/GUIA-LINGUAGEM-JAVASCRIPT-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ Guia da Linguagem JavaScript ](https://www.treinaweb.com.br/blog/guia-da-linguagem-javascript) 

     Neste Guia da Linguagem Javascript vamos abordar aspectos fundamentais, como: tipos de dados, variáveis, objetos, arrays e muito mais.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **14h 49min 47s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
