Drops #05: Meu guia para você aprender Go!
Tags: go, braziliandevs, learning, beginners
Published: 2023-06-13 15:37:56

_Foto de <a href="https://unsplash.com/@framesbyfin?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Heidi Fin</a> na <a href="https://unsplash.com/pt-br/fotografias/M2Kxb80gqcc?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>_  

## Introdução

E ae dev, tudo bem com você?

Nesses últimos meses eu passei boa parte do meu tempo aprendendo a linguagem criada pelo Google e queridinha pela comunidade de desenvolvedores (principalmente os apaixonados por CLIs 😅): Go!

Foi um desafio e tanto, dado que eu tinha pouco tempo para isso e precisava entregar um projeto bem massa para outros desenvolvedores poderem utilizar e criar seus próprios projetos escritos em Go. No caminho encontrei barreiras e facilidades para quem busca aprender uma nova linguagem, pensando nisso, resolvi trazer um guia simples e objetivo para você orientar seus estudos e ter em mente alguns pontos para evitar algumas barreiras durante essa jornada de aprendizado! Bom, falei demais, a ideia desse "guia" é que ele seja vivo! A medida que eu for encontrando novos conteúdos vou atualizá-lo por aqui, btw.

Bora pro post?

## Sumário

- [Crie um plano: o que você quer construir com Go?](#crie-um-plano-o-que-você-quer-construir-com-go)
- [Aprenda a testar seu código! Não subestime isso, ou ignore logo no início](#aprenda-a-testar-seu-código-não-subestime-isso-ou-ignore-logo-no-início)
- [Cuidado com “a comunidade de Go não faz isso”](#cuidado-com-a-comunidade-de-go-não-faz-isso)
- [Indicações de conteúdos](#indicações-de-conteúdos)
  - [Comunidades](#comunidades)
  - [Cursos](#cursos)
  - [Outros](#outros)
- [Links úteis](#links-úteis)
- [Finalizando...](#finalizando)

## Crie um plano: o que você quer construir com Go?

Antes de sair por ai buscando tutoriais pela internet e já sair colocando a mão na massa, pare um pouco, e reflita: o que você quer construir com Go? É muito fácil cairmos em um limbo onde não conseguimos visualizar a evolução do nosso aprendizado muito por conta de que se quer elaboramos um plano para isso! A pergunta é bem simples afinal, e com ela podemos até obter novas como: "O que dá para construirmos com Go?", "Por que raios o Google criou essa linguagem?", "Qual problema eles queriam resolver?". 

"Comece do começo": elabore um plano com objetivos que sejam fáceis de atingir, e assim que atingi-lo, adicione mais "requisitos" **ainda no mesmo projeto**, e.g.:

- Quero construir uma API com 1 endpoint hello world com Go;
- Quero construir uma API com CRUD de TO-DOs com Go;
- Quero construir uma API conectada ao Postgres com Go;
- Quero adicionar testes na minha API com Go.

Claro que isso são exemplos simples, não estou entrando no detalhe do que é um fato: de que você precisará entender e aprender as especificidades da linguagem. Mas isso será muito mais fácil se você tiver um objetivo e algo que seja tangível durante esse processo!

## Aprenda a testar seu código! Não subestime isso, ou ignore logo no início

Se você estiver vindo de outra linguagem, muito provavelmente (se você tiver o mínimo de preocupação com a qualidade e escalabilidade do seu projeto) você ficará curioso para entender como funcionam os testes no Go. Não caia na armadilha de pensar *“ah, isso aqui eu posso ver depois, preciso construir minha API!”*: é muito tranquilo aprender Go já com testes, isso irá facilitar a construção do seu projeto (pelo *design e refactor*), e também fará com que você tenha um código mais idiomático. Inclusive a recomendação desse tópico é pra esse excelente guia do [Chris James](https://twitter.com/quii): [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests/) (com a versão traduzida em pt-BR aqui: [Aprenda Go com Testes](https://larien.gitbook.io/aprenda-go-com-testes/)). Apesar do guia estar utilizando a versão 1.16 do Go (e no momento em que eu escrevo esse artigo, já estamos na 1.20.5), não tive muitos problemas ao seguí-lo.

## Cuidado com “a comunidade de Go não faz isso”

Meu amigo, isso aqui sem dúvida algum foi uma barreira e tanto 🤣 Como se não bastasse a "pressão" que (eu não sei você, mas eu sou expert nisso) colocamos em nós mesmos, sempre haverá alguém para fazer isso ainda melhor! HAHAHA 

É *óbvio* que cada tecnologia/linguagem terá um jeito adequado ou mais correto de lidar com um certo problema, mas pense comigo: isso é algo realmente necessário de nos preocuparmos logo no começo? O que eu mais ouvi sobre a comunidade de Go (isso, sobre, e não diretamente da comunidade) é de que "X coisa não é feita assim", "A comunidade prefere convencionar de Y jeito". O ponto aqui é que será fácil encontrar opiniões nesse sentido, o que você precisa é filtrar bem o conteúdo que encontra por ai... Em alguns momentos você terá uma sensação como se alguém estivesse falando pra uma criança: "Olha, cuidado pra você não tropeçar e cair", sendo que ela nem se quer começou a "engatinhar" 🤣

## Indicações de conteúdos

Aqui vou deixar alguns links de comunidades e cursos disponíveis na web que vão te ajudar muito! Nas comunidades é possível sanar dúvidas, buscar opiniões sobre um determinado assunto e acompanhar as novidades da linguagem da galera que está há mais tempo em contato com a linguagem (ou não hehehe).

### Comunidades

- **LinkedIn: Go Developer Community**: https://www.linkedin.com/groups/10541552/
- **Gophers: Slack oficial da comunidade Go**: https://join.slack.com/t/gophers/shared_invite/zt-1x4z32nlf-QOO8r9eqA_C4kGa2YPlB2Q

### Cursos

- **Aprenda Go 🇧🇷**: Curso completo em português da linguagem Go construído pela [Ellen Korbes](https://twitter.com/veekorbes)

Apesar do conteúdo já ter mais de 3 anos, a playlist do curso está gratuita no YouTube e conta com mais de 180 vídeos que explora a linguagem com diversos exercícios.

{% embed https://www.youtube.com/playlist?list=PLCKpcjBB_VlBsxJ9IseNxFllf-UFEXOdg %}

- **Go 101**: Curso 100% gratuito do blog [Aprenda Golang](https://aprendagolang.com.br/), construído pelo Tiago Temporin.

{% embed https://youtube.com/playlist?list=PLHPgIIn9ls6-1l7h8RUClMKPHi4NoKeQF&si=p_lUYWmO6U0r-sFk %}

### Outros

**Google I/O**: Apesar de não ser um conteúdo específico de Go, vou deixar a recomendação aqui para você acompanhar o Google I/O! 

O Google I/O é uma conferência de programadores que é organizada anualmente pela Google em São Francisco, Califórnia, Estados Unidos. O objetivo dessa conferência é orientar os programadores a melhorarem seus programas com técnicas que a Google demonstra (e geralmente tem o Go na jogada!). Aqui estão os links das últimas 3 edições disponíveis no YouTube:

- [Google I/O | 2023.](https://www.youtube.com/playlist?list=PL590L5WQmH8dAqv03RCMbZrbzxqCn6W3O)
- [Google I/O | 2022.](https://www.youtube.com/playlist?list=PL590L5WQmH8dUdwu3ZWuy5xh8j2iGgApr)
- [Google I/O | 2021.](https://www.youtube.com/playlist?list=PL590L5WQmH8cmLG5BDnf334-eMhkmlvNE)

**Gopher Academy: Talks!**: A Gopher Academy é a força criativa por trás da [GopherCon](https://www.gophercon.com), uma conferência que celebra todas as coisas do Go! Desde sua estreia em 2014, a GopherCon desenvolveu algumas das melhores programações da comunidade Go. A GopherCon até inspirou reuniões em países como Reino Unido, Índia, Brasil, Cingapura, Rússia e China, com novas conferências globais surgindo todos os anos!

No canal do YouTube, você pode encontrar conteúdos mais específicos sobre Go, apresentados durante as edições da GopherCon. Aqui estão os links das últimas 3 edições disponíveis no YouTube:


- [GopherCon | 2022.](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBfiSJSt-zPRbVSMDfK0EwQC)
- [GopherCon | 2021.](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBfulCVQD6EaU8c-GM56aUU7)
- [GopherCon | 2021 - Lightning Talks.](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBfGcmAccnsjqkYFHRn9XDjA)
- [GopherCon | 2020.](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBfUint2hCE1JRxRWChloasB)


Vale dizer que também temos a nossa edição BR, você pode encontrar mais detalhes aqui: https://gopherconbr.org.

## Links úteis

- **gobyexample.com** - uma introdução prática ao Go com vários exemplos: https://gobyexample.com

- **gosamples.dev** - uma biblioteca de tutoriais e exemplos de Go que ajuda você a resolver problemas de código do dia a dia: https://gosamples.dev

- **avelino/awesome-go** - uma lista com curadoria de incríveis frameworks, bibliotecas e software Go: https://github.com/avelino/awesome-go

- **Effective Go** - um guia construído pelos mantenedores do Go para entendermos a suas propriedades e expressões idiomáticas: https://go.dev/doc/effective_go

> 💡 O documento "Effective Go" foi escrito para o lançamento do Go em 2009 e não foi atualizado significativamente desde então. Embora seja um bom guia para entender como usar a linguagem em si, graças à estabilidade da linguagem, fala pouco sobre as bibliotecas e nada sobre mudanças significativas no ecossistema Go desde que foi escrito, como o sistema de compilação, testes, módulos e polimorfismo.

- **A tour of Go** - uma espécie de "tour" interativo construído pelos mantenedores do Go que cobre as características mais importantes da linguagem com diferentes lições: https://go.dev/tour/list

## Finalizando...

Bem, é isso, por hoje, é só!

Quero te agradecer por chegar até aqui, e queria lhe pedir também para me encaminhar as suas dúvidas, comentários, críticas, correções ou sugestões sobre a publicação.

Deixe seu ❤️ se gostou ou um 🦄 se esse post te ajudou de alguma maneira! Não se esqueça de ver os posts anteriores e me siga para maaaais conteúdos.

Até!