#1.2 $GOPATH e Workspace ## $GOPATH Os comandos em Go dependem de uma variável do sistema chama $GOPATH. Note que não é a variável $GOROOT, responsável pelo local aonde a linguagem está instalada. Essa variável($GOPATH), marca a localização do ambiente de trabalho Go. Em sistema UNIX-Linux, a variável do sistema deverá ser configurada da seguinte forma no arquivo `.bash_profile` export GOPATH=/home/apple/mygo No Windows você precisa criar uma nova variável de ambiente chamada GOPATH, e configura-la para o diretório de trabalho, por exemplo: `c:\mygo` É comum ter mais de um Workspace no seu $GOPATH, mas lembre-se de usar `:`(`;` no Windows) para delimitar os diretórios. Com o $GOPATH configurado você já poderá realizar o download de pacotes externos utilizando o `go get`. Dentro do seu $GOPATH, deverá ter os seguintes diretórios: - `src` Para arquivos de código fonte .go, .c, .g, .s. - `pkg` Para bibliotecas compiladas .a. - `bin` Para executáveis Nesse livro, vamos utilizar a pasta: `mygo` como único ambiente no $GOPATH. ## Diretórios de pacotes Crie um novo arquivo chamado sqrt.go dentro da pasta `$GOPATH/src/mymath/sqrt.go` (Note que também foi criado um diretório chamado 'mymath', o qual será o nome do nosso pacote) Todas as vezes que um novo pacote for criado, você deverá criar uma pasta com seu nome dentro de `src`. O nome das pastas costumam ter o mesmo nome do pacote que será utilizado. Você pode ter quantas sub-pastas quiser, por exemplo: Se você criar uma pasta `$GOPATH/src/github.com/astaxie/beedb`, então seu pacote será `github.com/astaxie/beedb`. O nome do pacote sempre será o último, no caso do exemplo citado: `beedb` Seguindo as instruções acima. Execute os comandos abaixo: cd $GOPATH/src mkdir mymath Crie um novo arquivo chamado `sqrt.go` e ponha o seguinte conteúdo: // Código fonte de $GOPATH/src/mymath/sqrt.go package mymath func Sqrt(x float64) float64 { z := 0.0 for i := 0; i < 1000; i++ { z -= (z*z - x) / (2 * x) } return z } Agora o diretório e código fonte do meu pacote foi criado. Conforme explicado, recomendo que utilize o nome do pacote correspondendo ao diretório. ## Compilando pacotes Agora que nós criamos nosso pacote, como vamos utilizá-lo de modo prático? Existem duas maneiras de fazer isso. 1. Mude para o diretório do seu pacote e execute o comando `go install`. 2. Execute o comando acima, utilizando o nome do arquivo sem extenção, exemplo: `go install mymath`. Após compilado, podemos ver o arquivo executável do pacote na seguinte pasta: cd $GOPATH/pkg/${GOOS}_${GOARCH} // O arquivo do pacote gerado com a extenção .a mymath.a Nosso arquivo foi gerado com a extenção `.a` que é um arquivo binário, como vamos utilizá-lo? Obviamente teremos que criar uma nova aplicação para utilizar. Crie uma nova aplicação chamada `mathapp` cd $GOPATH/src mkdir mathapp cd mathapp vim main.go Código fonte: //$GOPATH/src/mathapp/main.go código fonte. package main import ( "mymath" "fmt" ) func main() { fmt.Printf("Olá, mundo. Sqrt(2) = %v\n", mymath.Sqrt(2)) } Para compilar nossa aplicação, deveremos alterar o código fonte de diretório, nesse caso para `$GOPATH/src/mathapp` e executar o comando `go install`. Agora teremos um arquivo executável dentro da pasta `$GOPATH/bin/`. Para executarmos basta: `./mathapp` no terminal, e você deverá ver o seguinte retorno: Olá, mundo. Sqrt(2) = 1.414213562373095 ## Instalando pacotes remotamente Go possui uma ferramente para utilizar pacotes remotos, chamada `go get`. Ela é suportada por grandes comunidades de código aberto, incluindo: Github, Google Code, Bitbucket e Launchpad. go get github.com/astaxie/beedb Você pode utilizar o parâmetro `-u` para a atualizar os pacotes já existentes, por exemplo: `go get -u …`. O `go get` utiliza as ferramentas de versionamento de código aberto mais utilizadas do mercado como `git` para o GitHub e o `hg` para o Google Code. Antes de utilizar o `go get` certifique-se de ter instalado ao menos uma delas. (Nota do tradutor: Recomendo utilizar Git) Após a execução do comando acima, você deverá ter a seguinte estrutura de diretórios: $GOPATH src |-github.com |-astaxie |-beedb pkg |--${GOOS}_${GOARCH} |-github.com |-astaxie |-beedb.a O comando `go get` clona o código fonte e dependencias para o seu $GOPATH/src e instala os pacote com `go install` Você também pode utilizar pacotes de terceiros através de imports no código fonte da aplicação, utilizando a sintaxe abaixo: import "github.com/astaxie/beedb" ## Estrutura de diretórios completa Se você seguiu todos os passos anteriores corretamente, sua estrurura de diretórios deverá ser algo semelhando a isso: bin/ mathapp pkg/ ${GOOS}_${GOARCH}, A arquitetura do seu sistema: darwin_amd64, linux_amd64 mymath.a github.com/ astaxie/ beedb.a src/ mathapp main.go mymath/ sqrt.go github.com/ astaxie/ beedb/ beedb.go util.go Agora você é capaz de ver claramente que a estrutura do diretório `bin` contém arquivos executáveis, `pkg` contém arquivos compilados e `src` contém arquivos de origem do pacote. Agora que esclarecemos como Go gerencia dependencias e código fonte, vamos recaptular de forma rápida a estrutura; `bin` contém os executaveis, `pkg` bibliotecas ou pacotes compilados, `src` código fonte da sua aplicação e pacotes. (O GOPATH no Windows é exibido como: `%GOPATH%`, como esse livro tem um foco maior em sistemas UNIX-Like, usuários Windows deverão realizar futuros ajustes para que tudo ocorra como esperado) ## Links - [Sumário](preface.md) - Sessão anterior: [Instalação](01.1.md) - Próxima sessão: [Comandos em Go](01.3.md)