Introdução
- Formatos: Gitbook, EPUB ou PDF
- Versão original: English
Motivação
- Explore a linguagem Go escrevendo testes
- Tenha uma base com TDD. O Go é uma boa linguagem para aprender TDD por ser simples de aprender e ter testes nativamente
- Tenha confiança de que você será capaz de escrever sistemas robustos e bem testados em Go
- Assista a um vídeo ou leia sobre o motivo pelo qual testes unitários e TDD são importantes
Índice
Primeiros Passos com Go
- Instalação do Go - Prepare o ambiente para produtividade.
- Olá, mundo - Declarando variáveis, constantes, declarações
if
/else
, switch, escreva seu primeiro programa em Go e seu primeiro teste. Sintaxe de subteste e closures. - Inteiros - Mais conteúdo sobre sintaxe de declaração de função e aprenda novas formas de melhorar a documentação do seu código.
- Iteração - Aprenda sobre
for
e benchmarking. - Arrays e slices - Aprenda sobre arrays, slices,
len
, variáveis recebidas como argumentos,range
e cobertura de testes. - Estruturas, métodos e interfaces - Aprenda sobre
structs
, métodos,interface
e testes orientados a tabela (table driven tests). - Ponteiros e erros - Aprenda sobre ponteiros e erros.
- Maps - Aprenda sobre armazenamento de valores na estrutura de dados
map
. - Injeção de dependência - Aprenda sobre injeção de dependência, qual sua relação com interfaces e uma introdução a I/O.
- Mocks - Use injeção de dependência com mocks para testar um código não testado.
- Concorrência - Aprenda como escrever código concorrente para tornar seu software mais rápido.
- Select - Aprenda a sincronizar processos assíncronos de forma elegante.
- Reflexão - Aprenda sobre reflexão.
- Sync - Conheça algumas funcionalidades do pacote
sync
, comoWaitGroup
eMutex
. - Contexto - Use o pacote
context
para gerenciar e cancelar processos de longa duração.
Criando uma aplicação
Agora que você já deu seus Primeiros Passos com Go, esperamos que você tenha uma base sólida das principais funcionalidades da linguagem e como TDD funciona.
Essa seção envolve a criação de uma aplicação.
Cada capítulo é uma continuação do anterior, expandindo as funcionalidades da aplicação conforme nosso "Product Owner" dita.
Novos conceitos serão apresentados para ajudar a escrever código de qualidade, mas a maior parte do material novo terá relação com o que pode ser feito com a biblioteca padrão do Go.
No final desse capítulo, você deverá ter uma boa ideia de como escrever uma aplicação em Go testada.
- Servidor HTTP - Vamos criar uma aplicação que espera por requisições HTTP e as responde.
- JSON, routing e aninhamento - Vamos fazer nossos endpoints retornarem JSON e explorar como trabalhar com rotas.
- IO e classificação - Vamos persistir e ler nossos dados do disco e falar sobre classificação de dados.
- Linha de comando e estrutura do projeto - Suportar diversas aplicações em uma base de código e ler entradas da linha de comando.
- Tempo - Usar o pacote
time
para programar atividades. - Websockets - Aprender a escrever e testar um servidor que usa websockets.
Dúvidas e respostas
Costumo ver perguntas nas Interwebs como:
Como testo minha função incrível que faz x, y e z?
Se tiver esse tipo de dúvida, crie uma Issue no GitHub e vou tentar achar tempo para escrever um pequeno capítulo para resolver o problema. Acho que conteúdo como esse é valioso, já que está resolvendo problemas reais
envolvendo testes que as pessoas têm.
- OS exec - Um exemplo de como podemos usar o sistema operacional para executar comandos para buscar dados e manter nossa lógica de negócio testável.
- Tipos de erro - Exemplo de como criar seus próprios tipos de erro para melhorar seus testes e tornar seu código mais fácil de se trabalhar.
Contribuição
- Esse projeto está em desenvolvimento, tanto seu conteúdo original quanto sua tradução. Se tiver interesse em contribuir, por favor entre em contato.
- Leia contribuindo.md para algumas diretrizes.
- Quer ajudar com a tradução para o português? Leia traduzindo.md e entenda como o processo de tradução está organizado.
- Tem ideias? Crie uma issue!
Explicação
Tenho experiência em apresentar Go a equipes de desenvolvimento e tenho testado abordagens diferentes sobre como evoluir um grupo de pessoas que têm curiosidade sobre Go para criadores extremamente eficazes de sistemas em Go.
O que não funcionou
Ler o livro
Uma abordagem que tentamos foi pegar o livro azul e toda semana discutir um capítulo junto de exercícios.
Amo esse livro, mas ele exige muito comprometimento. O livro é bem detalhado na explicação de conceitos, o que obviamente é ótimo, mas significa que o progresso é lento e uniforme - não é para todo mundo.
Descobri que apenas um pequeno número de pessoas pegaria o capítulo X para ler e faria os exercícios, enquanto que a maioria não.
Resolver alguns problemas
Katas são divertidos, mas geralmente se limitam ao escopo de aprender uma linguagem; é improvável que você use goroutines para resolver um kata.
Outro problema é quando você tem níveis diferentes de entusiasmo. Algumas pessoas aprendem mais da linguagem que outras e, quando demonstram o que já fizeram, confundem essas pessoas apresentando funcionalidades que as outras ainda não conhecem.
Isso acaba tornando o aprendizado bem desestruturado e específico.
O que funcionou
De longe, a forma mais eficaz foi apresentar os conceitos da linguagem aos poucos lendo o go by example, explorando-o com exemplos e discutindo-o como um grupo. Essa abordagem foi bem mais interativa do que "leia o capítulo X como lição de casa".
Com o tempo, a equipe ganhou uma base sólida da gramática da linguagem para que conseguíssemos começar a desenvolver sistemas.
Para mim, é semelhante à ideia de praticar escalas quando se tenta aprender a tocar violão.
Não importa quão artístico você seja; é improvável que você crie músicas boas sem entender os fundamentos e praticando os mecanismos.
O que funcionou para mim
Quando eu aprendo uma nova linguagem de programação, costumo começar brincando em um REPL, mas hora ou outra preciso de mais estrutura.
O que eu gosto de fazer é explorar conceitos e então solidificar as ideias com testes. Testes certificam de que o código que escrevi está correto e documentam a funcionalidade que aprendi.
Usando minha experiência de aprendizado em grupo e a minha própria, vou tentar criar algo que seja útil para outras equipes. Aprender os conceitos escrevendo testes pequenos para que você possa usar suas habilidades de desenvolvimento de software e entregar sistemas ótimos.
Para quem isso foi feito
- Pessoas que se interessam em aprender Go.
- Pessoas que já sabem Go, mas querem explorar testes com TDD.
O que vamos precisar
- Um computador!
- Go instalado
- Um editor de texto
- Experiência com programação. Entendimento de conceitos como
if
, variáveis, funções etc. - Se sentir confortável com o terminal
Feedback
Logo criado por egonelbre Que estrela!