Em Go, uma aplicação organiza-se em pacotes. Um pacote é um conjunto de ficheiros de código-fonte que estão na mesma pasta. Todos os ficheiros de código-fonte numa pasta têm de ter o mesmo nome de pacote no topo do ficheiro. Por convenção, os pacotes têm o mesmo nome da pasta onde se encontram.
package greeting
O Go disponibiliza uma extensa biblioteca padrão de pacotes que podes usar no teu programa com a palavra-chave import.
Os pacotes da biblioteca padrão são importados através do seu nome.
package greeting
import "fmt"
É possível importar vários pacotes ao mesmo tempo, listando-os entre parênteses.
package greeting
import (
"errors"
"fmt"
)
Os pacotes de terceiros são importados através do URL do local onde o pacote se encontra. Um pacote pode receber um alias quando é importado. Isto pode ser usado para evitar conflitos entre nomes de pacotes:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Um pacote importado é depois referido pelo nome do pacote ou pelo alias:
// 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 determina se um elemento pode ser chamado por código de outros pacotes através da forma como é declarado.
Para tornar uma função, um tipo, uma variável ou uma constante visíveis externamente (a que se chama exported), o nome tem de começar por uma letra maiúscula.
Isto é análogo à forma como outras linguagens de programação, como o Java, 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 se aplica aos nomes dos campos em tipos struct personalizados: os nomes de campos que começam por letra maiúscula são visíveis externamente, os que começam por minúscula não são.