{"id":13466554,"url":"https://github.com/larien/aprenda-go-com-testes","last_synced_at":"2025-04-04T08:07:52.186Z","repository":{"id":39901057,"uuid":"194465565","full_name":"larien/aprenda-go-com-testes","owner":"larien","description":"Aprenda Go com desenvolvimento orientado a testes","archived":false,"fork":false,"pushed_at":"2024-01-25T09:31:50.000Z","size":6887,"stargazers_count":491,"open_issues_count":41,"forks_count":66,"subscribers_count":26,"default_branch":"main","last_synced_at":"2025-03-29T06:49:38.086Z","etag":null,"topics":["aprenda-go","go","go-br","golang","learn-go","tdd","test-driven-development","testing"],"latest_commit_sha":null,"homepage":"https://go.larien.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/larien.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-30T02:07:32.000Z","updated_at":"2025-03-14T16:03:22.000Z","dependencies_parsed_at":"2024-06-18T20:08:54.085Z","dependency_job_id":"debe5fb8-2032-4707-84db-a77bafe7649a","html_url":"https://github.com/larien/aprenda-go-com-testes","commit_stats":null,"previous_names":["larien/learn-go-with-tests"],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/larien%2Faprenda-go-com-testes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/larien%2Faprenda-go-com-testes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/larien%2Faprenda-go-com-testes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/larien%2Faprenda-go-com-testes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/larien","download_url":"https://codeload.github.com/larien/aprenda-go-com-testes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247142052,"owners_count":20890652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aprenda-go","go","go-br","golang","learn-go","tdd","test-driven-development","testing"],"created_at":"2024-07-31T15:00:46.214Z","updated_at":"2025-04-04T08:07:52.167Z","avatar_url":"https://github.com/larien.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Introdução\n\n![](.gitbook/assets/red-green-blue-gophers-smaller.png)\n\n[Arte por Denise](https://twitter.com/deniseyu21)\n\n![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)\n\n-   Formatos: [Gitbook](https://larien.gitbook.io/aprenda-go-com-testes), [EPUB ou PDF](https://github.com/larien/aprenda-go-com-testes/releases)\n-   Versão original: [English](https://quii.gitbook.io/learn-go-with-tests/)\n\n## Motivação\n\n-   Explore a linguagem Go escrevendo testes\n-   **Tenha uma base com TDD**. O Go é uma boa linguagem para aprender TDD por ser simples de aprender e ter testes nativamente\n-   Tenha confiança de que você será capaz de escrever sistemas robustos e bem testados em Go\n-   [Assista a um vídeo ou leia sobre o motivo pelo qual testes unitários e TDD são importantes](outros/motivacao.md)\n\n## Índice\n\n### Primeiros Passos com Go\n\n1. [Instalação do Go](primeiros-passos-com-go/instalacao-do-go.md) - Prepare o ambiente para produtividade.\n2. [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.\n3. [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.\n4. [Iteração](primeiros-passos-com-go/iteracao/iteracao.md) - Aprenda sobre `for` e benchmarking.\n5. [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.\n6. [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\\).\n7. [Ponteiros e erros](primeiros-passos-com-go/ponteiros-e-erros/ponteiros-e-erros.md) - Aprenda sobre ponteiros e erros.\n8. [Maps](primeiros-passos-com-go/maps/maps.md) - Aprenda sobre armazenamento de valores na estrutura de dados `map`.\n9. [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.\n10. [Mocks](primeiros-passos-com-go/mocks/mocks.md) - Use injeção de dependência com mocks para testar um código não testado.\n11. [Concorrência](primeiros-passos-com-go/concorrencia/concorrencia.md) - Aprenda como escrever código concorrente para tornar seu software mais rápido.\n12. [Select](primeiros-passos-com-go/select/select.md) - Aprenda a sincronizar processos assíncronos de forma elegante.\n13. [Reflexão](primeiros-passos-com-go/reflection/reflection.md) - Aprenda sobre reflexão.\n14. [Sync](primeiros-passos-com-go/sync/sync.md) - Conheça algumas funcionalidades do pacote `sync`, como `WaitGroup` e `Mutex`.\n15. [Contexto](primeiros-passos-com-go/contexto/contexto.md) - Use o pacote `context` para gerenciar e cancelar processos de longa duração.\n\n### Criando uma aplicação\n\nAgora 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.\n\nEssa seção envolve a criação de uma aplicação.\n\nCada capítulo é uma continuação do anterior, expandindo as funcionalidades da aplicação conforme nosso \"Product Owner\" dita.\n\nNovos 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.\n\nNo final desse capítulo, você deverá ter uma boa ideia de como escrever uma aplicação em Go testada.\n\n-   [Servidor HTTP](criando-uma-aplicacao/servidor-http/servidor-http.md) - Vamos criar uma aplicação que espera por requisições HTTP e as responde.\n-   [JSON, routing e aninhamento](criando-uma-aplicacao/json/json.md) - Vamos fazer nossos endpoints retornarem JSON e explorar como trabalhar com rotas.\n-   [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.\n-   [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.\n-   [Tempo](criando-uma-aplicacao/time/time.md) - Usar o pacote `time` para programar atividades.\n-   [Websockets](criando-uma-aplicacao/websockets/websockets.md) - Aprender a escrever e testar um servidor que usa websockets.\n\n### Dúvidas e respostas\n\nCostumo ver perguntas nas Interwebs como:\n\n\u003e Como testo minha função incrível que faz x, y e z?\n\nSe 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.\n\n-   [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.\n-   [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.\n\n## Contribuição\n\n-   _Esse projeto está em desenvolvimento_, tanto seu conteúdo original quanto sua tradução. Se tiver interesse em contribuir, por favor entre em contato.\n-   Leia [contribuindo.md](outros/contribuindo.md) para algumas diretrizes.\n-   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.\n-   Tem ideias? Crie uma issue!\n\n## Explicação\n\nTenho 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.\n\n### O que não funcionou\n\n#### Ler _o_ livro\n\nUma 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.\n\nAmo 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.\n\nDescobri 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.\n\n#### Resolver alguns problemas\n\nKatas são divertidos, mas geralmente se limitam ao escopo de aprender uma linguagem; é improvável que você use goroutines para resolver um kata.\n\nOutro 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.\n\nIsso acaba tornando o aprendizado bem _desestruturado_ e _específico_.\n\n### O que funcionou\n\nDe 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\".\n\nCom o tempo, a equipe ganhou uma base sólida da _gramática_ da linguagem para que conseguíssemos começar a desenvolver sistemas.\n\nPara mim, é semelhante à ideia de praticar escalas quando se tenta aprender a tocar violão.\n\nNão importa quão artístico você seja; é improvável que você crie músicas boas sem entender os fundamentos e praticando os mecanismos.\n\n### O que funcionou para mim\n\nQuando _eu_ aprendo uma nova linguagem de programação, costumo começar brincando em um REPL, mas hora ou outra preciso de mais estrutura.\n\nO 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.\n\nUsando 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.\n\n## Para quem isso foi feito\n\n-   Pessoas que se interessam em aprender Go.\n-   Pessoas que já sabem Go, mas querem explorar testes com TDD.\n\n## O que vamos precisar\n\n-   Um computador!\n-   [Go instalado](https://golang.org/)\n-   Um editor de texto\n-   Experiência com programação. Entendimento de conceitos como `if`, variáveis, funções etc.\n-   Se sentir confortável com o terminal\n\n## Feedback\n\n-   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).\n\n[MIT license](https://github.com/larien/aprenda-go-com-testes/tree/09aafaeebaef4443e80a6216cc46fa3d7bfdabbb/LICENSE.md)\n\n[Logo criado por egonelbre](https://github.com/egonelbre) Que estrela!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flarien%2Faprenda-go-com-testes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flarien%2Faprenda-go-com-testes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flarien%2Faprenda-go-com-testes/lists"}