Primeiro, analisarei brevemente a estrutura do livro por capítulos, depois escreverei a conclusão e listarei os prós e contras do livro.
Manual
Este é um capítulo introdutório sobre o uso da linguagem Go. Fala sobre a origem da linguagem, apresenta um exemplo de "hello world", discute execução e compilação, o conceito de módulos (pacotes), declaração de funções, formatação de código, trabalho com argumentos da linha de comando, declaração de variáveis e uma introdução ao "for". Também aborda a busca por strings repetidas de diferentes maneiras, trabalho com imagens e URLs e até a criação de um servidor web simples.
Estrutura do programa
São discutidas palavras reservadas, nomeação de variáveis, funções e constantes. Explica-se como declarar variáveis (usando var, const, type, func), o que pode ser omitido e como agrupar várias declarações. Pointers e a criação de variáveis com a função new são detalhadamente explorados. Também são abordados escopo e tempo de vida das variáveis, além da atribuição de valores. É mostrado o uso de pacotes externos, importação e encapsulamento de dados.
Tipos de dados fundamentais
São analisados números (inteiros e de ponto flutuante), operadores binários e bit a bit e sua precedência, comparação de números. Explica-se o uso de números complexos em Go, valores booleanos. Strings, sequências de controle e literais de string são discutidos, bem como runas para lidar com caracteres Unicode. Conversões entre strings e números também são abordadas. Constantes e pseudo-enums também são explicados.
Tipos de dados compostos
Aqui trata-se de tipos de dados mais complexos: arrays (sequências de tamanho fixo), slices (sequências dinâmicas), maps (coleções de pares chave-valor) e structs. Criação, inicialização, comparação e funções básicas para arrays e slices são explicadas. Vários exemplos de uso de maps são fornecidos. Structs são detalhadamente abordados, incluindo trabalho com JSON e uso das funções Marshal e Unmarshal. Por fim, um exemplo de trabalho com HTML usando Go.
Funções
Uma seção bastante completa sobre funções. Começa com teoria, depois um exemplo de processamento recursivo de HTML. Aborda o retorno de múltiplos valores e um dos conceitos-chave da linguagem — verificação de erros com if err != nil. Funções anônimas e funções variádicas (que recebem número variável de parâmetros) também são bem explicadas.
Métodos
Como Go não tem um modelo OOP clássico, o trabalho com objetos é feito via structs e métodos (funções associadas a structs). Fala-se sobre encapsulamento e como realizar a mesma tarefa com uma função comum ou um método.
Interfaces
Capítulo sobre criação e uso de interfaces. Começa com a parte teórica explicando seu propósito e implementação. Interfaces padrão são analisadas, como as de ordenação, servidores web e tratamento de erros. Também são discutidos declarações de tipos e tratamento de falhas. Se antes foi mostrado JSON, aqui temos XML.
Goroutines e canais. Concorrência
Dois capítulos dedicados à programação concorrente. O primeiro foca mais na teoria e exemplos, incluindo canais (bufferizados, unidirecionais) e a construção select.
O segundo capítulo tem menos exemplos e foca nos problemas da concorrência (como race conditions) e como resolvê-los (usando sync.Mutex e sync.RWMutex).
Pacotes e ferramentas do Go
Embora o conceito de módulos já tenha sido introduzido, aqui há um aprofundamento. Importações e uso de bibliotecas externas além das padrão são abordados.
A segunda parte cobre ferramentas do Go: compilação, instalação de pacotes e dependências, testes e organização do ambiente de trabalho e estrutura de diretórios.
Testes
Um dos últimos capítulos cobre testes em Go (go test), brevemente mencionado antes. Também cita bibliotecas externas para testes. A abordagem é padrão: importância dos testes, boas práticas, testes frágeis, cobertura de código, etc.
Reflexão e programação de baixo nível
Dois capítulos finais, curtos, para desenvolvedores experientes. O primeiro cobre reflexão (ex: criação de analisadores estáticos). O segundo fala sobre programação de baixo nível, usando C ou chamadas ao sistema operacional.
Conclusão
Para quem este livro é adequado?
É adequado tanto para iniciantes em Go quanto para desenvolvedores com experiência que desejam aprofundar e sistematizar seus conhecimentos.
Prós:
- Leitura clara e acessível.
- Estrutura lógica: cada capítulo segue naturalmente o anterior.
- Muitos exemplos de código.
- Exercícios práticos ao final de cada capítulo.
Contras:
- Não está claro se o livro foi atualizado; não cobre recursos recentes como generics.
- Mais de 400 páginas — pode ser intimidador para quem não está acostumado com livros técnicos longos.