Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/larien/learn-go-with-tests
Aprenda Go com desenvolvimento orientado a testes
https://github.com/larien/learn-go-with-tests
aprenda-go go go-br golang learn-go tdd test-driven-development testing
Last synced: 5 days ago
JSON representation
Aprenda Go com desenvolvimento orientado a testes
- Host: GitHub
- URL: https://github.com/larien/learn-go-with-tests
- Owner: larien
- License: mit
- Created: 2019-06-30T02:07:32.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-01-25T09:31:50.000Z (10 months ago)
- Last Synced: 2024-05-17T23:36:36.020Z (6 months ago)
- Topics: aprenda-go, go, go-br, golang, learn-go, tdd, test-driven-development, testing
- Language: Go
- Homepage: https://go.larien.dev
- Size: 6.57 MB
- Stars: 476
- Watchers: 29
- Forks: 66
- Open Issues: 41
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-made-by-brazilians - Learn Go with tests
README
# Introdução
![](.gitbook/assets/red-green-blue-gophers-smaller.png)
[Arte por Denise](https://twitter.com/deniseyu21)
![Build Status](https://travis-ci.org/larien/aprenda-go-com-testes.svg?main) [![Go Report Card](https://goreportcard.com/badge/github.com/larien/aprenda-go-com-testes)](https://goreportcard.com/report/github.com/larien/aprenda-go-com-testes)
- Formatos: [Gitbook](https://larien.gitbook.io/aprenda-go-com-testes), [EPUB ou PDF](https://github.com/larien/aprenda-go-com-testes/releases)
- Versão original: [English](https://quii.gitbook.io/learn-go-with-tests/)## 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](outros/motivacao.md)## Índice
### Primeiros Passos com Go
1. [Instalação do Go](primeiros-passos-com-go/instalacao-do-go.md) - Prepare o ambiente para produtividade.
2. [Olá, mundo](primeiros-passos-com-go/ola-mundo/ola-mundo.md) - Declarando variáveis, constantes, declarações `if`/`else`, switch, escreva seu primeiro programa em Go e seu primeiro teste. Sintaxe de subteste e closures.
3. [Inteiros](primeiros-passos-com-go/inteiros/inteiros.md) - Mais conteúdo sobre sintaxe de declaração de função e aprenda novas formas de melhorar a documentação do seu código.
4. [Iteração](primeiros-passos-com-go/iteracao/iteracao.md) - Aprenda sobre `for` e benchmarking.
5. [Arrays e slices](primeiros-passos-com-go/arrays-e-slices/arrays-e-slices.md) - Aprenda sobre arrays, slices, `len`, variáveis recebidas como argumentos, `range` e cobertura de testes.
6. [Estruturas, métodos e interfaces](primeiros-passos-com-go/estruturas-metodos-e-interfaces/estruturas-metodos-e-interfaces.md) - Aprenda sobre `structs`, métodos, `interface` e testes orientados a tabela \(table driven tests\).
7. [Ponteiros e erros](primeiros-passos-com-go/ponteiros-e-erros/ponteiros-e-erros.md) - Aprenda sobre ponteiros e erros.
8. [Maps](primeiros-passos-com-go/maps/maps.md) - Aprenda sobre armazenamento de valores na estrutura de dados `map`.
9. [Injeção de dependência](primeiros-passos-com-go/injecao-de-dependencia/injecao-de-dependencia.md) - Aprenda sobre injeção de dependência, qual sua relação com interfaces e uma introdução a I/O.
10. [Mocks](primeiros-passos-com-go/mocks/mocks.md) - Use injeção de dependência com mocks para testar um código não testado.
11. [Concorrência](primeiros-passos-com-go/concorrencia/concorrencia.md) - Aprenda como escrever código concorrente para tornar seu software mais rápido.
12. [Select](primeiros-passos-com-go/select/select.md) - Aprenda a sincronizar processos assíncronos de forma elegante.
13. [Reflexão](primeiros-passos-com-go/reflection/reflection.md) - Aprenda sobre reflexão.
14. [Sync](primeiros-passos-com-go/sync/sync.md) - Conheça algumas funcionalidades do pacote `sync`, como `WaitGroup` e `Mutex`.
15. [Contexto](primeiros-passos-com-go/contexto/contexto.md) - 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](criando-uma-aplicacao/servidor-http/servidor-http.md) - Vamos criar uma aplicação que espera por requisições HTTP e as responde.
- [JSON, routing e aninhamento](criando-uma-aplicacao/json/json.md) - Vamos fazer nossos endpoints retornarem JSON e explorar como trabalhar com rotas.
- [IO e classificação](criando-uma-aplicacao/io/io.md) - Vamos persistir e ler nossos dados do disco e falar sobre classificação de dados.
- [Linha de comando e estrutura do projeto](criando-uma-aplicacao/linha-de-comando/linha-de-comando.md) - Suportar diversas aplicações em uma base de código e ler entradas da linha de comando.
- [Tempo](criando-uma-aplicacao/time/time.md) - Usar o pacote `time` para programar atividades.
- [Websockets](criando-uma-aplicacao/websockets/websockets.md) - 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](duvidas-da-comunidade/os-exec/os-exec.md) - 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](duvidas-da-comunidade/error-types/error-types.md) - 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](outros/contribuindo.md) para algumas diretrizes.
- Quer ajudar com a tradução para o português? Leia [traduzindo.md](outros/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](https://www.amazon.com.br/Linguagem-Programa%C3%A7%C3%A3o-Go-Alan-Donovan/dp/8575225464) 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](https://gobyexample.com/), 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](https://golang.org/)
- 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
- Para a versão em português, submita um PR [aqui](https://github.com/larien/aprenda-go-com-testes) ou entre em contato comigo pelo [meu site](https://larien.dev).
[MIT license](https://github.com/larien/aprenda-go-com-testes/tree/09aafaeebaef4443e80a6216cc46fa3d7bfdabbb/LICENSE.md)
[Logo criado por egonelbre](https://github.com/egonelbre) Que estrela!