Programa do Curso
1. Introdução ao Go
- O que é o Go (Golang)?
- História e filosofia de design do Go
- O Go como linguagem de programação para web e sistemas
- Características principais:
- Tipagem estática
- Simplicidade e legibilidade
- Compilação rápida
- Concorrência integrada
- Reciclagem de memória (garbage collection)
- Compilação multiplataforma
- Casos de uso comuns do Go
- Vantagens e limitações do Go
- Go em comparação com C/C++, JavaScript, Ruby, Python e Java
- Compreensão do ecossistema Go
- Visão geral da biblioteca padrão Go
- Módulos Go e gestão de dependências
- Anatomia de uma aplicação Go
- Prática hands-on: Examinar e executar um programa Go simples
2. Configuração do Ambiente de Desenvolvimento Go
- Instalação do Go
- Compreensão da cadeia de ferramentas Go (toolchain)
- Configuração de variáveis de ambiente
- Escolha de uma IDE ou editor de código
- Utilização da linha de comandos com Go
- Criação de um espaço de trabalho Go (workspace)
- Compreensão da estrutura de projetos Go
- Inicialização de um projeto com Go Modules
- Utilização de
go mod init - Gestão de dependências com
go get - Atualização e inspeção de dependências
- Formatação de código-fonte com
gofmt - Execução de programas com
go run - Compilação de aplicações com
go build - Instalação de aplicações Go
- Compilação cruzada (cross-compiling) de aplicações
- Prática hands-on: Criar e configurar um projeto Go dentro de um contentor
3. Variáveis, Constantes e Tipos no Go
- Declaração de variáveis
- Tipos explícitos versus inferidos
- Declarações curtas de variáveis
- Constantes
- Valores zero (zero values)
- Âmbito e ciclo de vida de variáveis
- Tipos de dados primitivos:
- Números inteiros
- Números com vírgula flutuante
- Números complexos
- Booleanos
- Cadeias de caracteres (strings)
- Conversões de tipo
- Trabalho com Unicode e UTF-8
- Runes e bytes
- Atribuição de múltiplas variáveis
- Compreensão da segurança de tipos
- Exercício: Construir um pequeno programa de processamento de dados na linha de comandos
4. Operadores e Expressões
- Operadores aritméticos
- Operadores de comparação
- Operadores lógicos
- Operadores de atribuição
- Incremento e decremento
- Precedência de operadores
- Trabalho com cálculos inteiros e com vírgula flutuante
- Evitar erros comuns de conversão de tipos
- Exercício: Implementar lógica de cálculo e validação
5. Datas, Horas e Formatação
- Utilização do pacote
time - Criação e manipulação de datas
- Obter o tempo atual
- Fusos horários e localizações
- Análise de datas e horas
- Formatação de datas e horas
- Cálculo de durações
- Trabalho com carimbos de tempo Unix
- Gestão de timeouts
- Exercício: Adicionar carimbos de tempo e cálculos de duração a uma aplicação
6. Arrays, Slices, Maps e Structs
Arrays
- Declaração de arrays
- Inicialização de arrays
- Iteração sobre arrays
- Arrays multidimensionais
Slices
- Compreensão de slices versus arrays
- Criação de slices
- Adição de elementos
- Cópia de slices
- Comprimento e capacidade de slices
- Sub-slices
- Pegadinhas comuns com slices
Maps
- Criação de maps
- Adição e remoção de entradas
- Verificação da existência de uma chave
- Iteração sobre maps
- Maps contendo dados complexos
Structs
-
Definição de estruturas
-
Campos de structs
-
Inicialização de structs
-
Structs aninhados
-
Structs anónimos
-
Métodos de structs
-
Tags de struct para JSON
-
Prática hands-on: Modelar utilizadores, produtos e dados de aplicação utilizando structs, slices e maps
7. Lógica Condicional e Laços
- Enunciados
if elseeelse if- Declarações de variáveis dentro de condições
- Laços
for - Laços infinitos
- Condições de laço
breakecontinue- Iteração com
range - Laços aninhados
- Enunciados
switch - Switch baseados em expressões
- Casos múltiplos
- Casos padrão (default)
- Type switches
- Exercício: Implementar lógica de validação e processamento de aplicação
8. Funções
- Definição de funções
- Parâmetros de funções
- Valores de retorno
- Múltiplos valores de retorno
- Valores de retorno nomeados
- Funções variádicas
- Funções anónimas
- Valores de função
- Fechar (Closures)
- Recursão
- Passar funções como argumentos
- Funções que retornam erros
- Design de funções pequenas e reutilizáveis
- Exercício: Refatorar código existente em funções reutilizáveis
9. Ponteiros e Conceitos de Memória
- O que é um ponteiro?
- Operadores de endereço e de referência (dereference)
- Ponteiros e parâmetros de funções
- Receptores de ponteiro (Pointer receivers)
- Ponteiros para structs
- Ponteiros nulos (nil pointers)
- Quando utilizar ponteiros
- Semântica de valor versus referência
- Compreensão da gestão de memória e reciclagem do Go
- Erros comuns com ponteiros
- Prática hands-on: Modificar dados de aplicação utilizando ponteiros
10. Criação de uma Aplicação Web em Go
- Visão geral das capacidades web do Go
- Introdução ao pacote
net/http - Criação de um servidor HTTP
- Pedidos e respostas HTTP
- Métodos HTTP
- URLs de pedido e parâmetros de consulta
- Cabeçalhos HTTP
- Códigos de estado HTTP
- Fundamentos de roteamento (routing)
- Criação de manipuladores (handlers)
- Gestão de dados de formulário
- Serviço de ficheiros estáticos
- Trabalho com modelos HTML
- Variáveis de modelo e estruturas de controlo
- Estruturação de uma aplicação web
- Prática hands-on: Construir um servidor web Go básico
11. Construção de um Serviço Web RESTful
- Fundamentos da arquitetura REST
- Design de pontos de acesso (endpoints) da API
- GET, POST, PUT, PATCH e DELETE
- Trabalho com JSON
- Codificação e decodificação de JSON
- Validação de pedidos
- Códigos de estado HTTP
- Respostas de erro
- Parâmetros de consulta e parâmetros de caminho
- Estruturas de resposta da API
- Separar manipuladores da lógica de negócio
- Prática hands-on: Construir uma API REST CRUD
12. Tempo de Execução, Compilação e Construção de Projetos Go
- Compreensão do compilador Go
- Processo de compilação do Go
go rungo buildgo installgo test- Flags de compilação
- Configuração específica de ambiente
- Compilação para diferentes sistemas operativos e arquiteturas
- Produção de binários autónomos
- Gestão de configuração de aplicação
- Exercício: Compilar a aplicação para múltiplas plataformas
13. Trabalho com Ficheiros e a Web
- Abertura e fecho de ficheiros
- Leitura de ficheiros
- Escrita em ficheiros
- Criação de diretórios
- Metadados de ficheiros
- E/S com buffer (Buffered I/O)
- Trabalho com fluxos (streams)
- Leitura e escrita de ficheiros JSON
- Clientes HTTP
- Realização de pedidos HTTP saídos
- Gestão de erros de clientes HTTP
- Timeouts e cancelamento
- Processamento de respostas de API
- Prática hands-on: Recuperar dados de uma API externa e persisti-los localmente
14. Gestão de Erros e Depuração
- Abordagem do Go aos erros
- Retorno de erros de funções
- Verificação de erros
- Criação de erros personalizados
- Encapsulamento de erros (Wrapping errors)
- Adição de contexto aos erros
errors.Iseerrors.As- Pânico e recuperação (Panic and recovery)
- Quando utilizar
panic - Depuração de problemas comuns no Go
- Registo de atividade da aplicação (Logging)
- Utilização de ferramentas de depuração Go
- Exercício: Diagnosticar e corrigir erros de aplicação introduzidos deliberadamente
15. Interfaces e Abstração
- O que é uma interface?
- Implementação implícita de interfaces
- Definição de interfaces
- Valores de interface
- Interfaces vazias /
any - Afirmações de tipo (Type assertions)
- Type switches
- Implementações por ponteiro versus valor
- Design de pequenas interfaces
- Inversão de dependências
- Utilização de interfaces para testes
- Redução do acoplamento da aplicação
- Prática hands-on: Introduzir interfaces na aplicação web de exemplo
16. Pacotes e Organização do Projeto
- Criação de pacotes
- Convenções de nomenclatura de pacotes
- Identificadores exportados e não exportados
- Importação de pacotes
- Inicialização de pacotes
- Organização de camadas da aplicação
- Pacotes internos
- Gestão de dependências com Go Modules
- Versionamento semântico
- Utilização de pacotes de terceiros
- Evitar dependências circulares
- Design de projetos Go mantíveis
- Exercício: Refatorar a aplicação em pacotes separados
17. Concorrência com Goroutines
- O que é concorrência?
- Goroutines
- Iniciar goroutines
- Compreensão da execução concorrente leve
- Desafios de sincronização
- Estado partilhado
- Condições de corrida (Race conditions)
- Utilização de
sync.WaitGroup - Mutexes e mutexes de leitura/escrita
- Operações atómicas
- Prática hands-on: Converter uma tarefa sequencial em processamento concorrente
18. Canais (Channels)
- Compreensão de canais
- Envio e receção de valores
- Canais com buffer versus sem buffer
- Comportamento bloqueante (Blocking behavior)
- Fecho de canais
- Iteração sobre canais
- Canais direcionais
- Comunicação baseada em canais
- Enunciados Select
- Timeouts e cancelamento
- Padrões de pool de trabalhadores (Worker-pool patterns)
- Padrões produtor/consumidor
- Prática hands-on: Construir um sistema concorrente de trabalhadores
19. Contexto e Gestão de Pedidos
- Por que os contextos são importantes em aplicações web
context.Context- Contexto com âmbito de pedido
- Cancelamento
- Prazos (Deadlines)
- Timeouts
- Propagação de contexto através das camadas da aplicação
- Cancelamento de operações de base de dados ou HTTP
- Evitar má utilização de contextos
- Exercício: Adicionar cancelamento de pedidos e timeouts à aplicação web
20. Teste de Aplicações Go
- Por que o teste automatizado é importante
- Escrita de testes unitários
- O pacote
testing - Funções de teste
- Convenções de nomenclatura de testes
- Testes orientados a tabela (Table-driven tests)
- Teste de erros
- Teste de manipuladores HTTP
- Servidores de teste HTTP
- Fixtures de teste
- Cobertura de testes
- Referências de desempenho (Benchmarks)
- Testes de exemplo
- Teste de interfaces com mocks ou falsos (fakes)
- Prática hands-on: Criar uma suite de testes para a aplicação de exemplo
21. Otimização de Desempenho
- Compreensão do desempenho de aplicações Go
- Identificação de gargalos
- Desempenho de CPU versus memória
- Estruturas de dados eficientes
- Redução de alocações desnecessárias
- Cadeias de caracteres, bytes e buffers
- Gestão de goroutines
- Evitar concorrência excessiva
- Estratégias de cache
- Considerações de base de dados e rede
- Perfilamento de aplicações (Profiling)
- Benchmarks e testes de desempenho
- Utilização das ferramentas de perfilamento do Go
- Exercício: Fazer o perfil e otimizar uma aplicação deliberadamente ineficiente
22. Segurança e Boas Práticas para Aplicações Web Robustas
- Validação de entrada do utilizador
- Gestão segura de pedidos HTTP
- Prevenção de vulnerabilidades web comuns
- Gestão de erros segura
- Conceitos de autenticação e autorização
- Gestão de segredos e configuração
- Comunicação HTTP segura
- Evitar informações sensíveis em registos
- Gestão e atualização de dependências
- Limites de recursos e timeouts de pedidos
- Exercício: Rever e reforçar a API de exemplo
23. Registo de Aplicações e Observabilidade
- Fundamentos de registo (Logging)
- Registo estruturado
- Níveis de registo
- Registo de pedidos
- Registo de erros
- Correlação e IDs de pedido
- Monitorização do comportamento da aplicação
- Métricas básicas
- Pontos de verificação de saúde (Health-check endpoints)
- Diagnóstico de problemas em produção
- Prática hands-on: Adicionar registo estruturado e verificações de saúde
24. Containerização da Aplicação Go
- Por que utilizar contentores?
- Aplicações Go e containerização
- Escrita de um Dockerfile
- Construções multi-etapa (Multi-stage builds)
- Construção de uma imagem de tempo de execução mínima
- Gestão de configuração através de variáveis de ambiente
- Redes de contentores
- Exposição de portos da aplicação
- Execução da aplicação num contentor
- Teste da aplicação containerizada
- Prática hands-on: Empacotar a aplicação Go de exemplo como um contentor pronto para produção
25. Implantação
- Preparação de uma aplicação para produção
- Construção de binários de produção
- Configuração de ambiente
- Implantação baseada em contentores
- Arquitetura de implantação
- Proxies reversos
- Considerações HTTPS/TLS
- Verificações de saúde da aplicação
- Encerramento gracioso (Graceful shutdown)
- Gestão de sinais do sistema operativo
- Escala de aplicações web Go
- Escala horizontal versus vertical
- Resolução de problemas básicos de implantação
- Prática hands-on: Implantar a aplicação web de exemplo
26. Projeto Final: Aplicação Web Go Completa
Os participantes juntam os conceitos ao desenvolver uma aplicação completa.
O projeto pode incluir:
- Inicialização de projeto com Go Modules
- Organização de pacotes
- Roteamento HTTP
- Pontos de acesso da API REST
- Gestão de pedidos e respostas JSON
- Validação de entradas
- Gestão de erros
- Interfaces
- Processamento concorrente
- Comunicação com APIs externas
- Persistência em ficheiros ou base de dados
- Testes automatizados
- Registo (Logging)
- Considerações de desempenho
- Containerização
- Configuração de produção
- Implantação
27. Revisão e Boas Práticas
- Revisão da sintaxe central do Go
- Convenções de codificação Go
- Escrita de Go idiomático
- Manter o código simples
- Design de pacotes eficaz
- Boas práticas de gestão de erros
- Princípios de design de interfaces
- Boas práticas de concorrência
- Estratégias de teste
- Considerações de desempenho
- Mantibilidade e legibilidade
- Erros comuns cometidos por novos desenvolvedores Go
- Abordagens recomendadas para continuar o desenvolvimento em Go
28. Conclusão
- Revisão dos conceitos-chave
- Revisão da aplicação web concluída
- Perguntas e discussão
- Resolução de problemas de cenários do mundo real comuns
- Próximos passos recomendados para desenvolvimento em Go
- Bibliotecas Go adicionais e recursos do ecossistema
- Oportunidades adicionais para construir serviços Go de nível de produção
Requisitos
- Compreensão dos princípios gerais de programação
Público-alvo
- Desenvolvedores
Formação Empresarial Personalizada
Soluções de formação concebidas exclusivamente para empresas.
- Conteúdo Personalizado: Adaptamos o programa e os exercícios práticos aos objetivos e necessidades reais do seu projeto.
- Horário Flexível: Datas e horários adaptados à agenda da sua equipe.
- Formato: Online (ao vivo), In-Company (em suas instalações) ou Híbrido.
Preço por grupo privado, formação online em direto, a partir de 5200 € + VAT*
Entre em contato conosco para obter um orçamento preciso e conhecer nossas promoções mais recentes
Testemunhos de Clientes (5)
O instrutor provou ser um especialista no assunto, algo que eu nunca dou como garantido. Ele forneceu insights muito úteis sobre os padrões da indústria.
Giuseppe
Curso - Learning Go Programming
Máquina Traduzida
Aproveitei muito os exercícios práticos que fizemos. Eu aprendo melhor fazendo as coisas, então foi ótimo que Francesco tenha proposto muitos exercícios práticos. Tive dificuldade em entender alguns conceitos apresentados nos slides, mas quando consegui colocar a mão na massa e implementar algumas das principais características da linguagem, isso me ajudou muito a compreender melhor.
Adam Fitzhugh - OpticoreIT
Curso - Learning Go Programming
Máquina Traduzida
o ritmo, a capacidade dos instrutores de ajudar e manter perguntas ligeiramente mais difíceis.
Andrei Mihai - Viasat
Curso - Learning Go Programming
Máquina Traduzida
O conhecimento aprofundado de Radu e o ritmo ajustado às minhas necessidades.
Adeel Ahmad - Coefficient Data Ltd
Curso - Learning Go Programming
Máquina Traduzida
Flexibilidade do instrutor. Adaptou realmente o curso às nossas necessidades específicas.
Daniel Kurner - Daimler TSS
Curso - Learning Go Programming
Máquina Traduzida