Em Go, uma aplicação é organizada em pacotes. Um pacote é uma coleção de arquivos-fonte que ficam na mesma pasta. Todos os arquivos-fonte de uma pasta precisam ter o mesmo nome de pacote no topo do arquivo. Por convenção, os pacotes recebem o mesmo nome da pasta em que estão.
package greeting
Go oferece uma extensa biblioteca padrão de pacotes, que você pode usar no seu programa com a palavra-chave import.
Os pacotes da biblioteca padrão são importados pelo próprio nome.
package greeting
import "fmt"
É possível importar vários pacotes de uma vez escrevendo-os entre parênteses.
package greeting
import (
"errors"
"fmt"
)
Pacotes de terceiros são importados usando a url do local do pacote. Você pode dar um apelido a um pacote na hora de importar. Isso ajuda a evitar conflitos entre nomes de pacotes:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Depois, um pacote importado é acessado pelo nome ou pelo apelido:
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
O Go decide se um item pode ser chamado por código de outros pacotes pela forma como ele é declarado.
Para tornar uma função, um tipo, uma variável ou uma constante visível fora do pacote (o que é chamado de exported), o nome precisa começar com letra maiúscula.
Isso é análogo a linguagens como Java, que usam modificadores de acesso como public e private.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
O mesmo vale para nomes de campos em tipos struct personalizados: nomes de campos que começam com letra maiúscula são visíveis fora do pacote, e os que começam com letra minúscula não são.