• Stars
    star
    482
  • Rank 91,212 (Top 2 %)
  • Language
    Go
  • License
    MIT License
  • Created over 5 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Aprenda Go com desenvolvimento orientado a testes

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. Mocks - Use injeção de dependência com mocks para testar um código não testado.
  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. Reflexão - Aprenda sobre reflexão.
  14. Sync - Conheça algumas funcionalidades do pacote sync, como WaitGroup e Mutex.
  15. 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

  • Para a versão em português, submita um PR aqui ou entre em contato comigo pelo meu site.

MIT license

Logo criado por egonelbre Que estrela!

More Repositories

1

clean-architecture

[Deprecated] Clean architecture example written in Go.
Go
23
star
2

larien.github.io-deprecated

Personal website created using Svelte. No pretty code here.
CSS
9
star
3

clean-code-go

[WIP] Some of Uncle Bob's Clean Code concepts adapted for Go language. This is also a self-improving code study repository.
8
star
4

product

This is an implementation of services communication via gRPC, using Docker, different testing approaches, and other topics like mocking, relational database, API.
Go
5
star
5

personal-site

Vue
4
star
6

family-tree

Project with Go and Neo4j.
Go
4
star
7

k8s.study

Prática de estudos de Kubernetes.
3
star
8

connect

Connect is a Python Flask project within the cloud-native ecosystem. Second project of Udacity's Cloud Native Nanodegree program, focusing on documenting and architecting a monolith migration to microservices.
Python
3
star
9

potato

go skelethon with most of the things a microservice needs to survive
Go
3
star
10

golang.course

[WIP] Anotações sobre curso de Go.
2
star
11

larien.dev

Website page written in Svelte
HTML
2
star
12

adventofcode

Go
2
star
13

sudoku-detector

Python
2
star
14

larien.github.io

Third version of larien.dev, this time written in Vue.JS again. TODO: rewrite with Astro
Vue
1
star
15

trello

[WIP] Trello client & CLI written in Go
Go
1
star
16

planner

[DEPRECATED] Planner is a CLI to automate daily and weekly planning in Trello, the app I use the most for daily planning and organization.
Go
1
star
17

markdown-101

Dicas rápidas sobre markdown. Mil agradecimentos ao curso de Markdown do Roberto Achar <3
1
star
18

sourcemaking

[WIP] Repositório de estudos para os livros e cursos disponibilizados pela Sourcemaking. Os exemplos estão escritos em inglês e adaptados para Go..
1
star
19

tdd-em-go-luciano-ramalho.course

Workshop realizado pelo Luciano Ramalho na Thoughtworks no dia 5 de julho. Repositório original em https://github.com/standupdev/gentle-tdd-in-go
Jupyter Notebook
1
star
20

larien

Anotações em português brasileiro sobre conteúdos técnicos estudados.
Go
1
star