Entrar em Contato
 Duração 28 horas

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
  • else e else if
  • Declarações de variáveis dentro de condições
  • Laços for
  • Laços infinitos
  • Condições de laço
  • break e continue
  • 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 run
  • go build
  • go install
  • go 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.Is e errors.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.
Investimento

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)

Próximas Formações Provisórias

Categorias Relacionadas