39 - Creación de paquetes propios

Cuando un programa es grande es conveniente dividirlo en paquetes y no tratar de resolver todo en el paquete main.

Hemos aprendido a utilizar los paquetes de la librería estándar de Go, ahora veremos como podemos crear nuestros paquetes para ser reutilizados.

Para que el compilador de Go puede ubicar los paquetes debemos configurar dos variables de entorno en el sistema operativo:

Para configurar las variables de entorno desde el Explorador de archivos presionamos el botón derecho sobre la opción "Este equipo" y seleccionamos "propiedades":

variables de entorno Go en Windows

En la nueva ventana seleccionamos la opción "Configuración avanzada del sistema" y presionamos la opción "Variables de entorno":

variables de entorno Go en Windows

En este diálogo creamos las dos variables de entorno "GOROOT" y "GOPATH", posiblemente la primera se creó cuando instaló el lenguaje Go.

La variable GOPATH indicar la carpeta donde implementa todos sus programas, en esta es donde crearemos una carpeta llamada src y dispondremos los paquetes que crearemos:

variables de entorno Go en Windows

Desarrollaremos un paquete muy sencillo llamado "matematica" y dispondremos dos funciones para sumar y restar dos enteros.

archivo: matematica.go

package matematica

func Sumar(v1, v2 int) int {
    return v1 + v2
}

func Restar(v1, v2 int) int {
    return v1 - v2
}

En la carpeta c:\programasgo\ creamos una subcarpeta llamada "src" y dentro de esta una carpeta llamada "matematica"

Guardamos el archivo matematica.go en la carpeta matematica.

Crearemos nuestro paquete principal que haga uso del paquete matematica.

archivo: ejercicio162.go

package main

import (
    "fmt"
    "matematica"
)

func main() {
    fmt.Println("La suma de 2+3 es", matematica.Sumar(2, 3))
    fmt.Println("La diferencia de 5-1 es", matematica.Restar(5, 1))	
}

Nuestro programa principal si requiere utilizar las funciones del paquete matematica debe importarlo:

import (
	"fmt"
	"matematica"
)

El compilador puede ubicarlo gracias a que configuramos la variable de entorno GOPATH.

Igual a cuando llamamos a funciones del paquete fmt le antecedemos el nombre del paquete a la función lo mismo sucede con los paquetes que creamos:

func main() {
    fmt.Println("La suma de 2+3 es", matematica.Sumar(2, 3))
    fmt.Println("La diferencia de 5-1 es", matematica.Restar(5, 1))	
}

Tengamos en cuenta que todas las funciones que implementemos en el paquete matematica y queremos poder acceder desde otros paquetes deben comenzar con el primer caracter en mayúsculas. Aquello que queremos ocultar en el paquete lo disponemos en minúsculas y solo puede ser accedido dentro del mismo paquete.