# Aprenda Go com Testes

![](https://2763912287-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lia9CiG1cfWmh7Adpdu%2F-Lia9TbxTuAr7XbyNb3I%2F-Lia9ambvvlPGkPz-Q7f%2Fred-green-blue-gophers-smaller.png?generation=1561860928341453\&alt=media)

[Arte por Denise](https://twitter.com/deniseyu21)

* 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](meta/motivacao)

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

* Crie issues/submita PRs [aqui](https://github.com/quii/learn-go-with-tests) ou [me envie um tweet em @quii](https://twitter.com/quii).
* 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/35d0dbb8c6467128a4b4637742b4c2fe563c0a88/LICENSE.md)

[Logo criado por egonelbre](https://github.com/egonelbre) Que estrela!
