Entendendo ponteiros na Golang \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 18 Horas 

 53 Min 

 00 Seg 

   Tempo restante da oferta: 18 53 00 

  [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) Entendendo ponteiros na Golang  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) [ Go ](https://www.treinaweb.com.br/blog/categoria/go) 

# 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.

 [ 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)  

Continuando a nossa série de artigos sobre a [linguagem de programação Go](https://go.dev/), nós vamos falar sobre ponteiros na Golang. Neste artigo vamos ver o que são ponteiros, quais as vantagens do uso de ponteiros em nossos programas e como podemos utilizá-los na Golang.

## O que são ponteiros?

Ponteiros na Golang e também em outras linguagens de programação que disponham desse recurso, são variáveis que armazenam endereços de memória. Cada variável em um programa é armazenada em um endereço de memória específico, portanto, pode ser acessada diretamente pelo seu endereço de memória. Um ponteiro armazena o endereço de memória de outra variável, permitindo que o programa acesse ou modifique o conteúdo dessa variável indiretamente, ou seja, sem usar o nome da variável diretamente.

Os ponteiros são usados para alocar memória dinamicamente, passar argumentos para funções por referência, criar estruturas de dados complexas, manipular cadeias de caracteres e para acessar recursos de hardware diretamente. A capacidade de usar ponteiros é uma das principais características de linguagens de programação de baixo nível, como C e C++, mas também é suportada em muitas outras linguagens de programação modernas.

[  ![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)

## Quais as vantagens e desvantagens dos ponteiros?

O uso de ponteiros na Golang oferece várias vantagens:

- **Eficiência de memória**: Em algumas situações, como na alocação dinâmica de memória, o uso de ponteiros pode ser mais eficiente do que a alocação estática de memória, permitindo que o programa acesse apenas a quantidade necessária de memória.
- **Flexibilidade**: O uso de ponteiros permite que os programas criem estruturas de dados complexas e dinâmicas, permitindo uma maior flexibilidade na programação.
- **Passagem por referência**: Os ponteiros permitem que as funções recebam argumentos por referência, o que significa que a função pode modificar o valor do argumento original. Isso é particularmente útil quando se trabalha com abundância de dados, pois evita a necessidade de copiar grandes blocos de dados entre as funções.
- **Acesso a recursos de hardware**: O uso de ponteiros permite que os programas acessem diretamente os recursos de hardware, como a memória ou os registradores do processador, permitindo uma maior otimização de código e desempenho.

Porém, nem tudo são flores, embora os ponteiros na Golang sejam uma ferramenta poderosa, seu uso incorreto pode levar a vários problemas, como, por exemplo:

- **Segurança**: Os ponteiros podem ser usados para acessar diretamente a memória do sistema, o que pode ser um risco de segurança. Se um programa permitir que um ponteiro acesse áreas de memória que não são esperadas, pode ocorrer corrupção de memória ou violação de segurança.
- **Acesso não autorizado**: O uso incorreto de ponteiros pode levar a tentativas de acesso não autorizado aos recursos de hardware, incluindo a memória do sistema, o que pode causar problemas de segurança ou falhas do sistema.
- **Gerenciamento de memória**: O uso de ponteiros exige que o programador gerencie a alocação e desalocação de memória manualmente, o que pode ser propenso a erros. Se um programa não desalocar a memória corretamente, pode levar a vazamentos de memória, resultando em consumo excessivo de recursos do sistema.
- **Complexidade**: O uso de ponteiros pode tornar o código mais complexo e difícil de entender, especialmente para programadores menos experientes. Isso pode levar a erros de programação e dificuldades para manter e atualizar o código.

Em geral, é importante usar ponteiros com cuidado e entender os riscos e benefícios associados ao seu uso. É necessário ter um conhecimento sólido de gerenciamento de memória e de programação em geral para evitar problemas de segurança e garantir que o código seja eficiente e seguro.

## Trabalhando com ponteiros na Golang

Agora que já vimos o que são e quais as vantagens e desvantagens de trabalhar com os ponteiros, vamos colocar a mão no código e entender como utilizar esse recurso na linguagem de programação Go.

### Como declarar um ponteiro?

Para declarar ponteiros na Golang, usamos a seguinte sintaxe `var nomePonteiro *tipo`. Então, caso queiramos declarar um ponteiro que aponta para valores do tipo inteiro faremos da seguinte maneira `var ponteiroInteiro *int`.

Vejamos o exemplo em um código completo:

```go
package main

import (
	"fmt"
)

func main() {
	var ptr *int
	fmt.Println(ptr)
	fmt.Printf("%T\n", ptr)
}

```

O código acima ao ser executado irá exibir o seguinte resultado no terminal:

```

*int

```

Vamos entender o que está acontecendo nesse código, temos inicialmente a declaração do pacote e a importação do módulo `fmt`, dentro da nossa função `main`, temos a declaração de um ponteiro chamado `ptr` que aponta para valores do tipo inteiro com a instrução `var ptr *int` e logo em seguida realiza a exibição do valor e o tipo da variável `ptr`.

Veja que a exibição do valor de `ptr` resultou na saída &#96;&#96;, esse `nil` significa que o nosso ponteiro não aponta para lugar nenhuma, ou seja, nós temos o ponteiro declarado, mas que não aponta para nenhuma posição de memória, esse é o *zero value* de um ponteiro. Na segunda impressão temos o resultado `*int`, que demonstra que a nossa variável `ptr` de fato é um ponteiro de inteiros.

### Como apontar para uma posição de memória?

Na golang, para podermos saber a posição de memória de uma variável utilizamos o operador `&` (E comercial). Então, vamos criar duas variáveis, uma que possui um valor e a outra será um ponteiro que aponta para a posição de memória da primeira variável.

```go
package main

import (
	"fmt"
)

func main() {
	var a int = 10
	var ptr *int = &a

	fmt.Printf("Endereço de a: %p\n", &a)
	fmt.Printf("Endereço de ptr: %p\n", ptr)
}

```

No código acima declaramos uma variável `a` do tipo `int` sido inicializada com o valor `10`, logo em seguida declaramos a variável `ptr` que é um ponteiro de inteiro e que aponta para a posição de memória da variável `a` e por fim exibimos no terminal a posição de memória de ambas as variáveis. Ao executar esse código teremos o seguinte resultado:

```
Endereço de a: 0xc00001c1e0
Endereço de ptr: 0xc00001c1e0

```

Veja que ambas as variáveis apontam para a mesma posição de memória.

### Acessando o valor apontado por ponteiros na Golang

Também é possível acessarmos o valor apontado por um ponteiro utilizando o operador `*` antes do nome do ponteiro. Por exemplo:

```go
package main

import (
	"fmt"
)

func main() {
	var a int = 10
	var ptr *int = &a

	fmt.Printf("Endereço de a: %p\n", &a)
	fmt.Printf("Valor de a: %d\n", a)
	fmt.Printf("Endereço de ptr: %p\n", ptr)
	fmt.Printf("Valor de ptr: %d\n", *ptr)   
}

```

Ao executar o código acima teremos as seguinte saída no terminal:

```
Endereço de a: 0xc000122000
Valor de a: 10
Endereço de ptr: 0xc000122000
Valor de ptr: 10

```

Veja que ao utilizarmos a sintaxe `*ptr` conseguimos obter o valor `10` que é o valor armazenado na posição de memória apontada pelo ponteiro `ptr`. Essa operação de colocar o operador `*` antes do nome do ponteiro é chamada de “desreferência de ponteiro”, ou seja, quando fizemos `*ptr` nós desrefrerênciamos o ponteiro `ptr` para acessar o valor que estava armazenado na posição de memória apontada pelo ponteiro `ptr`.

### Alterando o valor de uma posição de memória

Agora que sabemos que podemos acessar o valor de uma posição de memória através da operação de desreferência, nós podemos alterar o valor armazenado nessa posição de memória, veja o exemplo:

```go
package main

import (
	"fmt"
)

func main() {
	var a int = 10
	var ptr *int = &a

	fmt.Printf("Endereço de a: %p\n", &a)
	fmt.Printf("Valor de a: %d\n", a)
	fmt.Printf("Endereço de ptr: %p\n", ptr)
	fmt.Printf("Valor de ptr: %d\n", *ptr)

	*ptr = 20

	fmt.Printf("Novo valor de a: %d\n", a)
	fmt.Printf("Novo valor de ptr: %d\n", *ptr)
}

```

Ao executar o código acima, teremos a seguinte saída no terminal:

```
Endereço de a: 0xc00001c1e0
Valor de a: 10
Endereço de ptr: 0xc00001c1e0
Valor de ptr: 10
Novo valor de a: 20
Novo valor de ptr: 20

```

Veja que ao utilizar a sintaxe `*ptr = 20`, nós alteramos o valor armazenado na posição de memória apontada pelo ponteiro `ptr` para o valor `20`. Com isso, a variável `a` também foi atualizada para o valor `20`. É importante lembrar que ao utilizar ponteiros para alterar valores de variáveis, devemos ter cuidado para não acessar áreas de memória não autorizadas e causar problemas de segurança ou falhas do sistema.

## Passagem por valor e por referência

A passagem por valor e por referência é uma questão importante quando se trabalha com ponteiros na Golang. Na linguagem Go, por padrão, todas as variáveis são passadas por valor para as funções, ou seja, a função recebe uma cópia do valor da variável. Porém, é possível passar um ponteiro para a função, permitindo que a função acesse e modifique o valor original da variável. Isso pode ser útil quando se trabalha com abundância de dados e se deseja evitar a cópia desnecessária de dados entre as funções. É importante lembrar que o uso de ponteiros para passagem de argumentos pode tornar o código mais complexo e difícil de entender, especialmente para programadores menos experientes.

Para ficar mais claro vejamos o seguinte exemplo:

```go
package main

import (
	"fmt"
)

func mudaValor(a int) {
	a = 20
}

func main() {
	var a int = 10

	fmt.Printf("Valor de a: %d\n", a)
	mudaValor(a)
	fmt.Printf("Valor de a: %d\n", a)
}

```

Ao executarmos esse código teremos o seguinte resultado:

```
Valor de a: 10
Valor de a: 10

```

Veja que mesmo após a chamada da função `mudaValor`, o valor da variável `a` continuou o mesmo, isso acontece, pois a função `mudaValor` recebe uma cópia do valor contido na variável `a` e não a posição de memória da variável `a`. Por isso ao realizarmos `a = 20` o valor da variável `a` continuou o mesmo. Para conserguimos de fato alterar o valor da variável teremos que mudar o nosso código para que a função `mudaValor` receba um ponteiro como parâmetro, dessa forma faremos com que nossa função trabalhe com passagem por referência e não com passagem por valor.

```go
package main

import (
	"fmt"
)

func mudaValor(a *int) {
	*a = 20
}

func main() {
	var a int = 10

	fmt.Printf("Valor de a: %d\n", a)
	mudaValor(&a)
	fmt.Printf("Valor de a: %d\n", a)
}

```

Ao executarmos o código acima teremos o seguinte resultado:

```
Valor de a: 10
Valor de a: 20

```

Veja que agora ao chamarmos a função `mudaValor`, o valor contido na variável `a` de fato foi alterado de `10` para `20`.

## Conclusão

Neste artigo, vimos o que são ponteiros em Golang, suas vantagens e desvantagens, e como trabalhar com eles na linguagem. Embora os ponteiros possam ser uma ferramenta poderosa, seu uso incorreto pode levar a problemas de segurança e desempenho. É importante entender bem o gerenciamento de memória e de programação em geral para evitar esses problemas e garantir a eficiência e segurança do código.

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.

- [ #Ponteiros ](https://www.treinaweb.com.br/blog/tag/ponteiros)
- [ #go ](https://www.treinaweb.com.br/blog/tag/go)
- [ #golang ](https://www.treinaweb.com.br/blog/tag/golang)

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/2024/03/CSS-SHORTHAND-400x280.jpg)  [ CSS ](https://www.treinaweb.com.br/blog/categoria/css) 

     3 anos atrás

    ##  [ Entendendo o shorthand no CSS ](https://www.treinaweb.com.br/blog/entendendo-o-shorthand-no-css) 

     Vamos aprender o que é shorthand no CSS, entender o conceito e aprender a deixar nossos estilos mais limpo e de fácil manutenção

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/01/atributos-html-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ Entendendo os atributos HTML ](https://www.treinaweb.com.br/blog/entendendo-os-atributos-html) 

     No artigo de hoje, veremos algo que está muito presente no mundo da programação, atributos. Por que são tão importantes para o Front-End?

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/18113452/MTV-DJANGO-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Entendendo o MTV do Django ](https://www.treinaweb.com.br/blog/entendendo-o-mtv-do-django) 

     Veja neste artigo como funciona o padrão de projeto utilizando em projetos Django, o MTV.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/jpa-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     10 anos atrás

    ##  [ Entendendo o método merge do JPA ](https://www.treinaweb.com.br/blog/entendendo-o-metodo-merge-do-jpa) 

     Aprenda como o método merge do JPA funciona e utilize-o corretamente em seu projeto.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/inje--o-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     10 anos atrás

    ##  [ Entendendo injeção de dependência ](https://www.treinaweb.com.br/blog/entendendo-injecao-de-dependencia) 

     Aprenda o que é injeção de dependência e como o princípio da inversão de dependência é importante para diminuir o acoplamento dos seus códigos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/13164211/JAVASCRIPT-COISAS-ESTRANHAS-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     7 anos atrás

    ##  [ JavaScript - Entendendo as partes estranhas ](https://www.treinaweb.com.br/blog/javascript-entendendo-as-partes-estranhas) 

     Conheça o motivo por trás de vários comportamentos considerados estranhos que o JavaScript possui.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/CONHECENDO-VÁRIAVEIS-CONSTANTES-JAVASCRIPT-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ Conhecendo variáveis e constantes no JavaScript ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-no-javascript) 

     Neste artigo vamos aprender a declarar e a utilizar constantes e variáveis no JavaScript, entendendo quando definir var, let e const.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/EXECUTAR-PRIMEIRO-CÓDIGO-JAVASCRIPT-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     6 anos atrás

    ##  [ Como executar seu primeiro código JavaScript ](https://www.treinaweb.com.br/blog/como-executar-seu-primeiro-codigo-javascript) 

     Vamos aprender e executar nosso primeiro código em JavaScript, entendendo sobre a utilização do console do navegador e ferramentas on-line.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/04/16131227/di-autowiring-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Autowiring em Container de Injeção de Dependência ](https://www.treinaweb.com.br/blog/autowiring-em-container-de-injecao-de-dependencia) 

     Dando sequência aos artigos sobre Injeção de Dependência e Container de Injeção de Dependência, nesse artigo veremos como implementar a resolução automática de dependências, algo comum em Frameworks como Laravel, Symfony etc.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/container-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Container de injeção de dependência (DI Container) ](https://www.treinaweb.com.br/blog/container-de-injecao-de-dependencia-di-container) 

     Injetar dependências pode se tornar uma tarefa tediosa quando se têm muitas classes envolvidas. Um container de injeção de dependência resolve grande parte desse problema.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/afinal-o-que-e-um-container-400x280.png)  [ DevOps ](https://www.treinaweb.com.br/blog/categoria/devops) 

     6 anos atrás

    ##  [ Afinal, o que é um container? ](https://www.treinaweb.com.br/blog/afinal-o-que-e-um-container) 

     Confira neste artigo o que vem a ser um container.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/ux-research-e-360-view-o-que-e-e-como-pode-ser-aplicado-400x280.png)  [ Acessibilidade e User Experience (UX) ](https://www.treinaweb.com.br/blog/categoria/acessibilidade-e-user-experience-ux) 

     6 anos atrás

    ##  [ UX Research e 360 View – O que é e como pode ser aplicado? ](https://www.treinaweb.com.br/blog/ux-research-e-360-view-o-que-e-e-como-pode-ser-aplicado) 

     Entenda o que é e como aplicar o UX Research e 360 View, técnicas importantes na hora de pensar em uma melhor experiência do usuário.

     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  **18h 53min 00s**

- 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
