Introdução
O que é programação
Quais profissões existem
Quais os melhores caminhos para seguir
Porque parece ser tão difícil
Como ser valioso para uma empresa
Introdução a Linguagem
Sobre a linguagem
Motivações
Instalação
Configuração do ambiente no InteliJ
Fundação
Primeiros passos
Trabalhando com tipagem
Arrays, Slice e Maps
Laços de repetições e condicionais
Ponteiros
Funções, Structs, Métodos, Interfaces e Generics
Trabalhando com packages
Módulos
Módulos privados
Instalação de pacotes
Compilando projetos Go
Workspaces Novo
Pacote Context
Entendendo o conceito de context
Armazenando e recuperando valores
Background, Timeout, Deadline e Cancelations
Desenvolvimento de APIs
Conceitos HTTP Server
Criando endpoint
Apresentando os principais frameworks
Middlewares
Autenticação e tokens JWT
Documentando API com Swagger
Clean Architecture
Introdução
Pontos importantes sobre arquitetura
Use Cases
Input vs Output
DTOs
Entities
Desenvolvendo camada de domínio
Criando Use Cases
Criando adaptador para banco de dados
Servindo endpoints HTTP
Criando CLI para iniciar a aplicação
Documentando aplicação
Go Doc
Testes Automatizados
Iniciando com testes no Go
Formas de asserção
Pacotes úteis
Trabalhando com Mocks
Fuzzes e testes de mutação
Benchmarking
Concorrência e Multithreading
Entendendo conceitos de concorrência e paralelismo
Como Go aborda concorrência e schedulers
Context Switching
C10K Problem
Stack Size
Race Conditions
Iniciando com Go Routines
Trabalhando com Channels e buffers
Wait Groups
Mutex
Banco de Dados
Entendendo banco de dados
Estabelecendo conexão
Primeiras operações
Boas práticas de segurança
Realizando operações utilizando Context
Go puro vs ORM
Trabalhando com GORM
Migrations
Deploy
Conceito de containers
Entendendo processo de compilação
Gerando imagem docker com multistage building
Conceitos de cloud
Criando uma conta na AWS
O que é EC2
Deployando nossa aplicação numa EC2
O que é ECS
Deployando nossa aplicação no ECS