En Go, una aplicación se organiza en paquetes. Un paquete es una colección de archivos fuente que se encuentran en la misma carpeta. Todos los archivos fuente de una carpeta deben tener el mismo nombre de paquete al inicio del archivo. Por convención, los paquetes se nombran igual que la carpeta en la que se encuentran.
package greeting
Go ofrece una extensa biblioteca estándar de paquetes que puedes usar en tu programa con la palabra clave import.
Los paquetes de la biblioteca estándar se importan usando su nombre.
package greeting
import "fmt"
Puedes importar varios paquetes a la vez agrupándolos entre paréntesis.
package greeting
import (
"errors"
"fmt"
)
Los paquetes de terceros se importan usando la URL de la ubicación del paquete. Puedes asignarle un alias a un paquete al importarlo. Esto sirve para evitar conflictos entre nombres de paquetes:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Luego, un paquete importado se referencia con el nombre del paquete o con su 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")
Go determina si el código de otros paquetes puede llamar a un elemento según cómo esté declarado.
Para que una función, un tipo, una variable o una constante sean visibles desde fuera (lo que se conoce como exported), el nombre debe empezar con mayúscula.
Esto es análogo a cómo otros lenguajes de programación, como Java, usan modificadores de acceso como public y 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
}
Lo mismo se aplica a los nombres de campo en tipos struct personalizados: los nombres de campo que empiezan con mayúscula son visibles desde fuera, y los que empiezan con minúscula no lo son.