Comece a Programar com Go
Uma introdução prática e amigável à linguagem de programação Go. O curso é estruturado em lições pequenas e gerenciáveis com tema de exploração espacial, abordando programação imperativa, tipos, funções, métodos, coleções, estado e concorrência.
Aulas
Visão Geral do Curso
📚 Resumo do Conteúdo
Uma introdução prática e acessível à linguagem de programação Go. O curso é estruturado em lições pequenas e gerenciáveis com tema de exploração espacial, abordando programação imperativa, tipos, funções, métodos, coleções, estado e concorrência.
Descubra o prazer de programar com Go por meio de pequenas lições e sete projetos-principais de navegação espacial.
Autor: Nathan Youngman, Roger Peppé
Agradecimentos: Jennifer Stout, Marina Michaels, Matthew Merkes, Joel Kotarski, Aleksandar Dragosavljević, Renée French, Olga Shalakhina, Erick Zelaya, April Milne, Monica Kamsvaag.
🎯 Objetivos de Aprendizagem
- Definir a linguagem de programação Go e seus principais casos de uso.
- Explicar a função do compilador Go e suas vantagens em relação aos interpretadores.
- Navegar pelo Go Playground para escrever, compilar e executar código.
- Estruturar corretamente o código Go usando o estilo obrigatório "uma verdadeira chave", evitando erros de sintaxe.
- Gerenciar dados usando diversas técnicas de declaração de variáveis e operadores de atribuição aritmética.
- Gerar números pseudorandom e implementar lógica condicional usando ramificações e operadores lógicos.
- Declarar e formatar variáveis de ponto flutuante usando
float32efloat64com largura e precisão específicas. - Identificar e mitigar erros causados por imprecisões de ponto flutuante e estouro de inteiros.
- Utilizar o pacote
bige constantes não tipadas para lidar com números que ultrapassam os limites padrão de bits. - Definir e invocar funções usando parâmetros, argumentos e sintaxe variádica.
🔹 Lição 1: Lançando-se em Órbita
Visão Geral: Esta lição apresenta o Go, a linguagem de programação contemporânea da computação em nuvem. Os alunos aprenderão a diferença fundamental entre a natureza compilada do Go e as linguagens interpretadas, como usar o Go Playground para experimentação imediata e a estrutura básica de um programa Go envolvendo pacotes e a função main.
Resultados de Aprendizagem:
- Definir a linguagem de programação Go e seus principais casos de uso.
- Explicar a função do compilador Go e suas vantagens em relação aos interpretadores.
- Navegar pelo Go Playground para escrever, compilar e executar código.
🔹 Lição 2: Lógica do Centro de Missão
Visão Geral: Esta lição apresenta os blocos fundamentais da programação em Go, focando na estruturação do código e no controle de sua execução. Os alunos aprenderão o estilo "uma verdadeira chave", pontos de entrada de programas, progressarão por atalhos de declaração de variáveis e operadores matemáticos, e terminarão com lógica de decisão usando booleanos, comparações e ramificações.
Resultados de Aprendizagem:
- Estruturar corretamente o código Go usando o estilo obrigatório "uma verdadeira chave" para evitar erros de sintaxe.
- Gerenciar dados usando diversas técnicas de declaração de variáveis e operadores de atribuição aritmética.
- Gerar números pseudorandom e implementar lógica condicional usando ramificações e operadores lógicos.
🔹 Lição 3: A Física dos Dados Espaciais
Visão Geral: Esta lição explora como o Go lida com dados numéricos, desde a precisão fracionária de números de ponto flutuante até as escalas massivas necessárias para distâncias astronômicas. Os alunos aprenderão a gerenciar as limitações da memória do computador, incluindo imprecisões de ponto flutuante e estouros de inteiros, enquanto dominam conversões explícitas de tipo e o uso do pacote big para tamanhos numéricos "inesperados".
Resultados de Aprendizagem:
- Declarar e formatar variáveis de ponto flutuante usando
float32efloat64com largura e precisão específicas. - Identificar e mitigar erros causados por imprecisões de ponto flutuante e estouro de inteiros.
- Utilizar o pacote
bige constantes não tipadas para lidar com números que ultrapassam os limites padrão de bits.
🔹 Lição 4: Construindo Módulos Modulares
Visão Geral: Esta lição cobre os blocos fundamentais dos programas Go: funções, tipos personalizados e métodos. Os alunos aprenderão como encapsular lógica para reutilização, definir novos tipos com comportamentos específicos e aproveitar funções de primeira classe — incluindo fechamentos (closures) e funções anônimas — para criar código flexível e modular. A lição termina com um projeto-principal prático envolvendo tabelas de conversão de temperatura.
Resultados de Aprendizagem:
- Definir e invocar funções usando parâmetros, argumentos e sintaxe variádica.
- Distinguir identificadores exportados e não exportados usando as convenções de nomeação do Go.
- Criar tipos personalizados e associar comportamentos a eles usando métodos e receptores.
🔹 Lição 5: Abastecendo a Carga Útil
Visão Geral: Esta lição aborda as estruturas de dados essenciais em Go para gerenciar coleções de informações. Ela passa de arrays de comprimento fixo e seu comportamento de cópia em memória para slices dinâmicos que servem como janelas flexíveis sobre os dados, e finalmente para mapas para pesquisas eficientes por chave-valor. A unidade culmina no projeto-principal "Jogo da Vida", que demonstra como usar slices multidimensionais para simular sistemas complexos.
Resultados de Aprendizagem:
- Declarar, inicializar e iterar sobre arrays de comprimento fixo e grades multidimensionais.
- Manipular slices usando intervalos de índice e crescimento dinâmico por meio da função
append. - Gerenciar eficiência de memória diferenciando entre comprimento e capacidade e pré-alocando coleções com
make.
🔹 Lição 6: Estruturando Habitats Marcianos
Visão Geral: Esta lição apresenta a abordagem do Go para organizar dados e comportamentos complexos. Os alunos aprenderão a agrupar tipos de dados diversos em estruturas (structs), inicializá-las usando literais compostos e gerenciar seu comportamento por meio de métodos e funções construtoras. A lição também explora a filosofia de design única do Go: favorecer composição em vez de herança e usar interfaces implícitas para alcançar polimorfismo.
Resultados de Aprendizagem:
- Definir, inicializar e copiar estruturas para gerenciar dados complexos de coordenadas marcianas e rovers.
- Codificar estruturas Go em formato JSON usando tags de struct para troca de dados personalizada.
- Implementar métodos, funções construtoras e embutimento de structs para criar código reutilizável e organizado.
🔹 Lição 7: Navegando pelo Buraco do Gopher
Visão Geral: Esta lição explora o poder e a segurança da indireção em Go, focando em como ponteiros permitem mutação eficiente de dados e gerenciamento de memória. Oferece um quadro robusto para programação defensiva ao ensinar os alunos a lidar com valores nil, gerenciar recursos com defer e implementar padrões idiomáticos de tratamento de erros — culminando na aplicação dessas regras a um motor de validação de Sudoku.
Resultados de Aprendizagem:
- Usar o caractere
&e o asterisco*para gerenciar endereços de memória e desreferenciar valores. - Implementar parâmetros e receptores de ponteiro para habilitar a mutação de dados em funções e métodos.
- Navegar valores
nilem slices, maps e interfaces sem causar panics em tempo de execução.
🔹 Lição 8: Comunicações Multirôver
Visão Geral: Esta lição apresenta as primitivas centrais de concorrência em Go: goroutines e canais. Explora como executar tarefas independentemente, comunicar-se de forma segura entre elas e gerenciar estado compartilhado usando Mutexes para evitar condições de corrida. A lição termina com um projeto-principal que simula rovers marcianos navegando em uma grade e relatando descobertas.
Resultados de Aprendizagem:
- Lançar e gerenciar tarefas concorrentes usando a palavra-chave
go. - Implementar comunicação segura entre goroutines usando canais e a instrução
select. - Construir pipelines de dados e gerenciar ciclos de vida de goroutines fechando canais.