Caleb Doxsey
Novatec
Authorized Portuguese translation of the English edition of Introducing Go, ISBN 9781491941959 © 2016 Caleb Doxsey. This translation is published and sold by permission of O'Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Introducing Go, ISBN 9781491941959 © 2016 Caleb Doxsey. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. 2016. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia Kinoshita Revisão gramatical: Smirna Cavalheiro Assistente editorial: Priscila A. Yoshimatsu Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-489-2 Histórico de impressões: Abril/2016
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
capítulo 1
Iniciando
Go é uma linguagem de programação de propósito geral, com recursos avançados e uma sintaxe clara. Por causa de sua ampla disponibilidade em várias plataformas, sua biblioteca comum, robusta e bem-documentada e seu foco em bons princípios de engenharia de software, Go é uma ótima linguagem de programação para aprender. Este livro não pressupõe nenhum conhecimento prévio de Go, e tem o propósito de servir como uma introdução fácil à linguagem. Todos os recursos essenciais da linguagem serão discutidos em capítulos pequenos e concisos que deverão preparar você para escrever programas reais em Go e lidar com alguns dos recursos mais avançados disponíveis para a linguagem (documentação online, livros, palestras etc.). Embora este livro seja adequado para programadores inexperientes, se você nunca programou antes, é provável que achará o material difícil demais para acompanhar. Você poderá se beneficiar ao consultar um recurso mais genérico sobre programação antes de mergulhar neste material, mas, para ser franco, a maioria dos alunos precisará de uma assistência pessoal e prática, que poderá ser encontrada em um ambiente de sala de aula ou em sessões um a um com um desenvolvedor experiente.
Configuração do computador Este livro contém muitos exemplos de código e exercícios. Para obter os melhores resultados possíveis, tente executar esses exemplos em seu próprio computador à medida que avançar pelos capítulos. 13
14
Introdução à Linguagem Go
Porém, antes de escrever seu primeiro programa Go, há alguns itens que você deverá configurar.
Editores de texto Go é uma linguagem bem sucinta e legível, portanto, qualquer editor de texto servirá para editar arquivos. Há plugins que acrescentam alguns recursos úteis (como preenchimento automático e formatação ao salvar) em muitos editores populares, mas esses plugins não são necessários para aprender a linguagem. Se você não tiver certeza de qual editor deve usar, recomendo o Atom do GitHub – ele é gratuito, adequado a diversas plataformas e fácil de instalar a partir do site do Atom (https://atom.io/).
O terminal Go é uma linguagem compilada e, como muitas linguagens, faz uso intensivo da linha de comando. Se você tem experiência anterior com uma linguagem que faz a maior parte das tarefas em um IDE (como Java ou C#), isso pode ser um pouco intimidador, mas, felizmente, as ferramentas de Go são bem fáceis de usar. Como lembrete, eis o modo como você pode acessar o terminal: Windows No Windows, o terminal (também conhecido como prompt de comandos) pode ser ativado pressionando a tecla Windows + R (segure a tecla Windows e então pressione R), digitando cmd.exe e teclando Enter. OS X No OS X, o terminal pode ser acessado navegando para Finder → Applications → Utilities → Terminal (Finder → Aplicativos → Utilitários → Terminal).
Capítulo 1 ■ Iniciando
15
Ambiente Variáveis de ambiente são um mecanismo oferecido pelo seu sistema operacional para mudar o comportamento de um programa sem precisar alterá-lo. Um ambiente é uma coleção dessas variáveis, em que cada uma tem um nome e um valor correspondente. Por exemplo, há uma variável de ambiente TEMP que armazena a localização de um diretório em seu computador, no qual arquivos temporários são armazenados. O conjunto de ferramentas de Go utiliza uma variável de ambiente chamada GOPATH para localizar códigos-fonte de Go. Embora você possa alterar o GOPATH para qualquer valor que quiser, para facilitar, nós a definiremos com o seu diretório home: Windows No Windows, as informações de usuário geralmente são armazenadas em C:\Users\<USERNAME>, em que <USERNAME> é substituído pelo seu nome de usuário (por exemplo, C:\Users\alice). O Windows tem uma variável de ambiente predefinida chamada USERPROFILE, que pode ser usada para definir seu GOPATH. Abra uma janela do terminal e digite o seguinte comando: setx GOPATH %USERPROFILE%
Se você estiver usando uma versão de Windows anterior ao Vista, talvez esse comando não funcione, mas também é possível definir variáveis de ambiente navegando para Control Panel → System → Advanced → Environment Variables (Painel de Controle → Sistema → Avançado → Variáveis de Ambiente). OS X No OS X, as informações de usuário geralmente são armazenadas em /Users/<USERNAME>, em que <USERNAME> é substituído pelo seu nome de usuário (por exemplo, /Users/alice). No OS X, definiremos GOPATH usando um arquivo especial de inicialização para o terminal, chamado .bash_profile. Abra um terminal e digite o comando a seguir: echo 'export GOPATH=$HOME\n' >> ~/.bash_profile
16
Introdução à Linguagem Go
Feche o terminal, abra-o novamente e digite o seguinte: env
Entre várias outras variáveis de ambiente, você deverá ver uma entrada para GOPATH.
Go O nome Go refere-se tanto à linguagem de programação quanto ao conjunto de ferramentas usado para construir e interagir com programas Go. Antes de começar a trabalhar com Go, será necessário instalar o conjunto de ferramentas de Go. Faça download e execute o instalador para sua plataforma a partir de golang.org/dl. Para confirmar que tudo está funcionando, abra um terminal e digite: go version
Você deverá ver o seguinte (seu número de versão e o sistema operacional podem ser um pouco diferentes): go version go1.5 windows/amd64
Se você receber um erro sobre o comando não ser reconhecido, experimente reiniciar seu computador. O conjunto de ferramentas de Go é composto de vários comandos e subcomandos diferentes. Você pode obter uma lista desses comandos digitando: go help
Com Go instalado e funcionando, você terá tudo que é necessário para escrever seu primeiro programa Go.
Seu primeiro programa Tradicionalmente, o primeiro programa que você escreve em qualquer linguagem de programação se chama “Hello, World” – um programa que simplesmente exibe Hello, World em seu terminal. Vamos escrever um programa desse tipo usando Go.
Capítulo 1 ■ Iniciando
17
Em primeiro lugar, crie uma nova pasta em que você possa armazenar o programa “Hello, World”. Crie uma pasta chamada ~/src/golang-book/chapter1. No terminal, você pode fazer isso digitando os comandos a seguir: No Windows md src\golang-book\chapter1
No OS X mkdir -p src/golang-book/chapter1
Abra seu editor de texto, crie um arquivo novo e insira o seguinte: package main import "fmt" // isto é um comentário func main() { fmt.Println("Hello, World") }
Certifique-se de que seu arquivo seja idêntico ao que foi mostrado aqui e salve-o como main.go na pasta que acabamos de criar. Abra um novo terminal e digite o seguinte: cd src/golang-book/chapter1 go run main.go
Você deverá ver Hello, World ser exibido em seu terminal. O comando go run toma os arquivos subsequentes (separados por espaços), compila-os gerando um executável, salva-o em um diretório temporário e então executa o programa. Se você não vir Hello, World ser exibido, talvez tenha cometido um erro ao digitar o programa. O compilador de Go fornecerá pistas sobre o local em que o erro se encontra. Como a maioria dos compiladores, o compilador de Go é extremamente detalhista e não tolera erros.
18
Introdução à Linguagem Go
Como ler um programa Go Vamos analisar este programa com mais detalhes: package main import "fmt" // isto é um comentário func main() { fmt.Println("Hello, World") }
Os programas Go são lidos de cima para baixo e da esquerda para a direita (como um livro). A primeira linha contém o seguinte: package main
Isso é conhecido como declaração de pacote, e todo programa Go deve começar com ela. Pacotes são a maneira de Go organizar e reutilizar código. Há dois tipos de programas Go: executáveis e bibliotecas. Aplicações executáveis são os tipos de programa que podemos executar diretamente do terminal (no Windows, eles terminam com .exe). Bibliotecas são coleções de código que empacotamos em conjunto para que elas possam ser usadas em outros programas. Exploraremos as bibliotecas com mais detalhes posteriormente; por enquanto, lembre-se de incluir essa linha em qualquer programa que você escrever. A próxima linha é uma linha em branco. Os computadores representam quebras de linha com um caractere especial (ou com vários caracteres). Quebras de linha, espaços e tabulações são conhecidos como espaços em branco (porque não podemos vê-los). Geralmente, Go não se preocupa com espaços em branco – eles são usados para deixar os programas mais legíveis (você poderia remover essa linha e o programa se comportaria exatamente da mesma maneira). Na próxima linha, vemos o seguinte: import "fmt"
Capítulo 1 ■ Iniciando
19
A palavra reservada import é o modo de incluir código de outros pacotes para que sejam usados em nosso programa. O pacote fmt (abreviatura de format) implementa formatação de entrada e saída. Considerando o que acabamos de aprender sobre os pacotes, o que você acha que os arquivos do pacote fmt contêm no início?1 Observe que fmt está entre aspas duplas. O uso de aspas duplas como essas é conhecido como uma string literal, que é um tipo de expressão. Em Go, strings representam uma sequência de caracteres (letras, números, símbolos etc.) de tamanho definido. As strings serão descritas com mais detalhes no próximo capítulo, mas, por enquanto, o aspecto importante a se ter em mente é que um caractere " de abertura deve ser seguido posteriormente por um caractere " de fechamento, e tudo que estiver entre eles estará incluído na string (o caractere " em si não faz parte da string). A linha que começa com // é conhecida como comentário. Os comentários são ignorados pelo compilador de Go e estão lá para facilitar sua vida (ou a vida de quem vá ler o código-fonte do programa). Go aceita dois estilos diferentes de comentário: comentários //, em que todo o texto entre // e o final da linha faz parte do comentário, e comentários /* */, em que tudo que estiver entre os asteriscos faz parte dos comentários (várias linhas podem ser incluídas). Depois disso, vemos uma declaração de função: func main() { fmt.Println("Hello, World") }
As funções são os blocos de construção de um programa Go. Elas têm entradas, saídas e uma série de passos conhecidos como instruções, que são executados em sequência. Todas as funções começam com a palavra reservada func, seguida do nome da função (main, nesse caso), uma lista de zero ou mais parâmetros entre parênteses, um tipo de retorno opcional e um corpo entre chaves. Essa função não tem parâmetros, não devolve nada e tem apenas uma instrução. O nome main é especial porque é a função chamada quando o programa é executado. 1 Arquivos do pacote fmt começam com package fmt.
20
Introdução à Linguagem Go
A última parte de nosso programa é constituída desta linha: fmt.Println("Hello, World")
Essa instrução é composta de três partes. Em primeiro lugar, acessamos outra função chamada Println do pacote fmt (é a parte correspondente a fmt.Println); Println quer dizer "print line". Em seguida, criamos uma nova string, que contém Hello, World e chamamos (também dizemos que invocamos ou executamos) essa função, com a string como o primeiro e único argumento. A essa altura, você já conheceu muita terminologia nova. Às vezes, ler seu programa deliberadamente em voz alta pode ajudar. Uma leitura do programa que acabamos de escrever poderia ser feita assim: Cria um novo programa executável que referencia a biblioteca fmt e contém uma função chamada main. Essa função não aceita nenhum argumento e não devolve nada. Ela acessa a função Println contida no pacote fmt e a chama com um argumento – a string Hello, World.
A função Println faz o verdadeiro trabalho desse programa. Você pode saber mais sobre essa função digitando o seguinte em seu terminal: godoc fmt Println
Entre outras informações, você deverá ver a saída mostrada na Figura 1.1.
Figura 1.1 – Saída de godoc fmt Println.
Capítulo 1 ■ Iniciando
21
Println formata usando os formatos-padrão de seus operandos e escreve na saída-padrão. Espaços são sempre adicionados entre os operandos e uma quebra de linha é concatenada. Ela devolve o número de bytes escritos e qualquer erro de escrita encontrado. Go é uma linguagem de programação muito bem documentada, porém, essa documentação pode ser difícil de entender, a menos que você já tenha familiaridade com linguagens de programação. Apesar disso, o comando godoc é extremamente útil e é um bom lugar para começar sempre que você tiver uma dúvida. De volta à função em questão, essa documentação informa que a função Println enviará qualquer informação que você lhe passar para a saída-padrão (ou seja, a saída do terminal em que você está trabalhando). É essa função que faz Hello, World ser exibido. No próximo capítulo, conheceremos os tipos ao explorar o modo como Go armazena e representa dados como Hello, World.
Exercícios 1. O que é um espaço em branco? 2. O que é um comentário? Quais são as duas maneiras de escrever um comentário? 3. Nosso programa começou com package main. Os arquivos do pacote fmt devem começar com qual instrução? 4. Usamos a função Println definida no pacote fmt. Se quiséssemos usar a função Exit do pacote os, o que você deveria fazer? 5. Modifique o programa que escrevemos de modo que, em vez de exibir Hello, World, ele apresente Hello, my name is, seguido de seu nome.