A Linguagem de Programação Go

A Linguagem de Programação Go Indisponível
× A Linguagem de Programação Go

A Linguagem de Programação Go

Compartilhar

Autores: Alan A. A. Donovan
Brian W. Kernighan

ISBN impresso: 978-85-7522-546-2
ISBN ebook: 978-85-7522-655-1
Ano: 2017
Páginas: 480
Preço impresso: R$ 98,00 O ebook deste livro está disponível na Amazon.

13 opiniões | Opine sobre este livro

Descrição do livro

A linguagem de programação Go é a fonte mais confiável para qualquer programador que queira conhecer Go. O livro mostra como escrever código claro e idiomático em Go para resolver problemas do mundo real. Esta obra não pressupõe conhecimentos prévios de Go nem experiência com qualquer linguagem específica, portanto você a achará acessível, independentemente de se sentir mais à vontade com JavaScript, Ruby, Python, Java ou C++.

  • O primeiro capítulo contém um tutorial com os conceitos básicos de Go, apresentado por meio de programas para E/S de arquivos e processamento de texto, imagens gráficas simples, clientes e servidores web.

  • Os primeiros capítulos discutem os elementos estruturais de programas Go: sintaxe, controle de fluxo, tipos de dados e a organização de um programa em pacotes, arquivos e funções. Os exemplos apresentam muitos pacotes da biblioteca-padrão e mostram como criar seus próprios pacotes. Capítulos mais adiante explicam o sistema de pacotes com mais detalhes, além de mostrar como compilar, testar e manter projetos usando a ferramenta go.

  • Os capítulos sobre métodos e interfaces apresentam a abordagem não convencional de Go à programação orientada a objetos, em que métodos podem ser declarados em qualquer tipo e as interfaces são implicitamente satisfeitas. Esses capítulos explicam os princípios fundamentais de encapsulamento, composição e substituibilidade usando exemplos realistas.

  • Dois capítulos sobre concorrência apresentam abordagens detalhadas a esse assunto cada vez mais importante. O primeiro, que discute o sistema básico de gorrotinas e canais, apresenta o estilo conhecido como processos sequenciais comunicantes (communicating sequential processes) pelo qual Go é renomado. O segundo aborda aspectos mais tradicionais de concorrência com variáveis compartilhadas. Esses capítulos oferecem uma base sólida para programadores que estão entrando em contato com a concorrência pela primeira vez.

  • Os dois últimos capítulos exploram recursos de baixo nível de Go. Um dos capítulos aborda a arte da metaprogramação usando reflexão. O outro mostra como usar o pacote unsafe para desviar-se do sistema de tipos em situações especiais e como usar a ferramenta cgo para criar vínculos (bindings) de Go com bibliotecas em C.

Ver menos ▲

Sumário

  • Prefácio
    • Origens de Go
    • Projeto Go
    • Como este livro está organizado
    • Onde encontrar mais informações
    • Agradecimentos
  • 1 Tutorial
    • 1.1 Hello, World
    • 1.2 Argumentos de linha de comando
    • 1.3 Encontrando linhas duplicadas
    • 1.4 GIFs animados
    • 1.5 Buscando um URL
    • 1.6 Buscando URLs de modo concorrente
    • 1.7 Um servidor web
    • 1.8 Miscelâneas
  • 2 Estrutura dos programas
    • 2.1 Nomes
    • 2.2 Declarações
    • 2.3 Variáveis
      • 2.3.1 Declarações curtas de variáveis
      • 2.3.2 Ponteiros
      • 2.3.3 A função new
      • 2.3.4 Tempo de vida das variáveis
    • 2.4 Atribuições
      • 2.4.1 Atribuição de tupla
      • 2.4.2 Possibilidade de atribuição
    • 2.5 Declarações de tipos
    • 2.6 Pacotes e arquivos
      • 2.6.1 Importações
      • 2.6.2 Inicialização de pacotes
    • 2.7 Escopo
  • 3 Tipos de dados básicos
    • 3.1 Inteiros
    • 3.2 Números de ponto flutuante
    • 3.3 Números complexos
    • 3.4 Booleanos
    • 3.5 Strings
      • 3.5.1 Strings literais
      • 3.5.2 Unicode
      • 3.5.3 UTF-8
      • 3.5.4 Strings e fatias de bytes
      • 3.5.5 Conversões entre strings e números
    • 3.6 Constantes
      • 3.6.1 Gerador de constantes iota
      • 3.6.2 Constantes sem tipo
  • 4 Tipos compostos
    • 4.1 Arrays
    • 4.2 Fatias
      • 4.2.1 Função append
      • 4.2.2 Técnicas in-place para fatias
    • 4.3 Mapas
    • 4.4 Estruturas
      • 4.4.1 Estruturas literais
      • 4.4.2 Comparando estruturas
      • 4.4.3 Inclusão de estruturas e campos anônimos
    • 4.5 JSON
    • 4.6 Templates de texto e HTML
  • 5 Funções
    • 5.1 Declarações de funções
    • 5.2 Recursão
    • 5.3 Múltiplos valores de retorno
    • 5.4 Erros
      • 5.4.1 Estratégias de tratamento de erros
      • 5.4.2 Fim de arquivo (EOF)
    • 5.5 Valores função
    • 5.6 Funções anônimas
      • 5.6.1 Cuidado: captura de variáveis de iteração
    • 5.7 Funções variádicas
    • 5.8 Chamadas de função adiadas
    • 5.9 Pânico
    • 5.10 Recuperação
  • 6 Métodos
    • 6.1 Declarações de métodos
    • 6.2 Métodos cujo receptor é um ponteiro
      • 6.2.1 Nil é um valor válido de receptor
    • 6.3 Compondo tipos por meio de inclusão de estruturas
    • 6.4 Valores e expressões método
    • 6.5 Exemplo: tipo vetor de bits
    • 6.6 Encapsulamento
  • 7 Interfaces
    • 7.1 Interfaces como contratos
    • 7.2 Tipos interface
    • 7.3 Como satisfazer uma interface
    • 7.4 Fazendo parse de flags com flag Value
    • 7.5 Valores interface
      • 7.5.1 Ressalva: uma interface contendo um ponteiro nil não é nil
    • 7.6 Ordenação com sort Interface
    • 7.7 A interface http Handler
    • 7.8 Interface error
    • 7.9 Exemplo: avaliador de expressões
    • 7.10 Asserções de tipo
    • 7.11 Diferenciando erros com asserções de tipo
    • 7.12 Consultando comportamentos com asserções de tipo interface
    • 7.13 Switches de tipo
    • 7.14 Exemplo: decodificação de XML baseada em token
    • 7.15 Alguns conselhos
  • 8 Gorrotinas e canais
    • 8.1 Gorrotinas
    • 8.2 Exemplo: Servidor de relógio concorrente
    • 8.3 Exemplo: Servidor de eco concorrente
    • 8.4 Canais
      • 8.4.1 Canais sem buffer
      • 8.4.2 Pipelines
      • 8.4.3 Canais unidirecionais
      • 8.4.4 Canais com buffer
    • 8.5 Looping em paralelo
    • 8.6 Exemplo: Web crawler concorrente
    • 8.7 Multiplexando com select
    • 8.8 Exemplo: Travessia concorrente de diretório
    • 8.9 Cancelamento
    • 8.10 Exemplo: Servidor de bate-papo
  • 9 Concorrência com variáveis compartilhadas
    • 9.1 Condições de concorrência
    • 9.2 Exclusão mútua: sync Mutex
    • 9.3 Mutexes de leitura/escrita: sync RWMutex
    • 9.4 Sincronização de memória
    • 9.5 Inicialização lazy: sync Once
    • 9.6 O detector de concorrência
    • 9.7 Exemplo: Cache concorrente não bloqueante
    • 9.8 Gorrotinas e threads
      • 9.8.1 Pilhas que podem aumentar
      • 9.8.2 Escalonamento de gorrotinas
      • 9.8.3 GOMAXPROCS
      • 9.8.4 Gorrotinas não têm identidade
  • 10 Pacotes e a ferramenta go
    • 10.1 Introdução
    • 10.2 Caminhos de importação
    • 10.3 A declaração do pacote
    • 10.4 Declarações de importação
    • 10.5 Importações vazias
    • 10.6 Pacotes e nomenclatura
    • 10.7 Ferramenta go
      • 10.7.1 Organização do workspace
      • 10.7.2 Fazendo download de pacotes
      • 10.7.3 Build de pacotes
      • 10.7.4 Documentando pacotes
      • 10.7.5 Pacotes internos
    • 10.7.6 Consulta de pacotes
  • 11 Testes
    • 11.1 A ferramenta go test
    • 11.2 Funções Test
      • 11.2.1 Testes aleatórios
      • 11.2.2 Testando um comando
      • 11.2.3 Testes caixa-branca
      • 11.2.4 Pacotes de testes externos
      • 11.2.5 Escrevendo testes eficazes
      • 11.2.6 Evitando testes frágeis
    • 11.3 Cobertura
    • 11.4 Funções Benchmark
    • 11.5 Profiling
    • 11.6 Funções Example
  • 12 Reflexão
    • 12.1 Por que usar reflexão?
    • 12.2 reflect Type e reflect Value
    • 12.3 Display: um printer recursivo de valores
    • 12.4 Exemplo: Codificando expressões-S
    • 12.5 Atualizando variáveis com reflect Value
    • 12.6 Exemplo: Decodificando expressões-S
    • 12.7 Acessando tags de campos de estrutura
    • 12.8 Exibindo os métodos de um tipo
    • 12.9 Uma advertência
  • 13 Programação de baixo nível
    • 13.1 unsafe Sizeof, Alignof e Offsetof
    • 13.2 unsafe Pointer
    • 13.3 Exemplo: Equivalência profunda
    • 13.4 Chamando código C com cgo
    • 13.5 Outra advertência
Ver sumário completo ▼

Sobre os autores

Alan A. A. Donovan

Alan A. A. Donovan é membro da equipe de Go do Google em Nova York. Estudou ciência da computação em Cambridge e no MIT, e trabalha com programação no mercado desde 1996. A partir de 2005, passou a trabalhar para o Google em projetos de infraestrutura e foi coprojetista do Blaze, o sistema proprietário de build dessa empresa. Criou várias bibliotecas… Ver perfil completo ▶

Brian W. Kernighan

Brian W. Kernighan é professor do departamento de ciência da computação da Universidade de Princeton. Participou da equipe técnica do Computing Science Research Center do Bell Labs de 1969 até o ano 2000, onde trabalhou com linguagens e ferramentas para Unix. É coautor de vários livros, incluindo C: A linguagem de programação – padrão ANSI… Ver perfil completo ▶

Opinião dos leitores

Horácio D B N

Livro muito bom, aborda a Linguagem Go de ponta a ponta.

Rodolfo d N A

Excelente, claro, direto e realmente expõe um conhecimento essencial para qualquer programador Go.

Diego P

Um ótimo livro que explica por que o Go foi criado da forma que é hoje. Ajuda muito a entender a filosofia por trás da linguagem.

Daniel G T P

A tradução é ótima! O livro é bem detalhado e cheio de exemplos.

Ver todas ▼