Skip to content
Aprenda Go com desenvolvimento orientado a testes
Go Other
  1. Go 98.7%
  2. Other 1.3%
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitbook/assets GitBook: [master] 59 pages and one asset modified Jul 3, 2019
arrays Renomeação de arquivos Jul 9, 2019
command-line Atualização das referências do projeto nos arquivos .go Jul 1, 2019
concurrency fixes #79 Jun 21, 2018
context follow consistency of separated test file Apr 26, 2019
criando-uma-aplicacao Troca de app-intro.md para intra introducao.md Aug 2, 2019
for Tradução dos comentários de código relacionados a Iteração Jul 8, 2019
hello-world Fix english hello prefix const Apr 28, 2019
http-server verboseness in tests is nice Apr 28, 2018
injecao-de-dependencia Termino de tradução de ID Jul 31, 2019
inteiros Tradução de referências Aug 9, 2019
io fixes #157 - close test file before removing Feb 20, 2019
json use Result() in response recorder, fixes #189 Jun 26, 2019
maps Revisão de maps Aug 2, 2019
meta Padronização de exemplo.md Jul 30, 2019
mocks Text review fixes Aug 7, 2019
perguntas-e-respostas GitBook: [master] 59 pages and one asset modified Jul 3, 2019
pointers Marks functions as test helper May 21, 2018
primeiros-passos-com-go Merge pull request #39 from jessicapaz/traducao/integers Aug 9, 2019
q-and-a more work on error types Jan 29, 2019
reflection fixes #123 - intermittent failure because of maps not guaranteeing order Aug 25, 2018
select fix: avoid goroutine leak May 21, 2019
structs lint issues fixed and check is wired up to build #37 Apr 10, 2018
sync updates on community convention around mutex naming and position plus… Feb 7, 2019
time Atualização das referências do projeto nos arquivos .go Jul 1, 2019
todo more work on websockets and start of todo thing Oct 21, 2018
websockets Atualização das referências do projeto nos arquivos .go Jul 1, 2019
.editorconfig improve editorconfig Jun 18, 2018
.gitbook.yaml Trocar translating.md para traduzindo.md Jul 8, 2019
.gitignore wip - cl - teasing towards using bufio.NewReader Jul 6, 2018
.mdlrc not allow MD010 hard tabs in Markdown files Jun 18, 2018
.travis.yml Atualização de valores no .travis.yml Jul 1, 2019
LICENSE.md better put in a license someday Apr 7, 2018
README.md Merge pull request #39 from jessicapaz/traducao/integers Aug 9, 2019
SUMMARY.md Merge pull request #39 from jessicapaz/traducao/integers Aug 9, 2019
book.json Atualização do gb-readme ao invés de pt-br-readme Jul 2, 2019
build.books.sh Merge pull request #39 from jessicapaz/traducao/integers Aug 9, 2019
build.sh Tradução de contribuindo.md Jul 3, 2019
epub-cover.png changed my mind, added the words back to cover Feb 7, 2019
epub-cover.pxm changed my mind, added the words back to cover Feb 7, 2019
gb-readme.md Inserção de @edmilton como tradutor Jul 11, 2019
go.mod Criação de versionamento de código com gomod Jul 3, 2019
go.sum Criação de versionamento de código com gomod Jul 3, 2019
pdf-cover.md some improvements for PDF Feb 14, 2019
red-green-blue-gophers-smaller.png pictures Jan 26, 2019
red-green-blue-gophers.png pictures Jan 26, 2019
title.txt Tradução de title.txt para geração de epub Jul 1, 2019

README.md

Introdução

Arte por Denise

Build Status Go Report Card

Motivação

Índice

Primeiros Passos com Go

  1. Instalação do Go - Prepare o ambiente para produtividade.
  2. 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.
  3. 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.
  4. Iteração - Aprenda sobre for e benchmarking.
  5. Arrays e slices - Aprenda sobre arrays, slices, len, variáveis recebidas como argumentos, range e cobertura de testes.
  6. Estruturas, métodos e interfaces - Aprenda sobre structs, métodos, interface e testes orientados a tabela (table driven tests).
  7. Ponteiros e erros - Aprenda sobre ponteiros e erros.
  8. Maps - Aprenda sobre armazenamento de valores na estrutura de dados map.
  9. 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.
  10. Mocking - Use injeção de dependência com mocking para testar um código sem nenhum teste.
  11. Concorrência - Aprenda como escrever código concorrente para tornar seu software mais rápido.
  12. Select - Aprenda a sincronizar processos assíncronos de forma elegante.
  13. Reflection - Aprenda sobre reflection.
  14. Sync - Conheça algumas funcionalidades do pacote sync, como WaitGroup e Mutex.
  15. Context - Use o pacote context para gerenciar e cancelar processos de longa duração.

Crie 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 embedding - 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

Traduzido com <3 por

  • Davi Marcondes Moreira

github twitter

  • Diego Nascimento

github twitter linkedin

  • Edmilton Neves

site github twitter linkedin

  • Jéssica Paz

site github twitter linkedin

  • Lauren Ferreira

site github twitter linkedin

  • Rafael Acioly

github twitter linkedin

Feedback

MIT license

Logo criado por egonelbre Que estrela!

You can’t perform that action at this time.