Y es que los lenguajes, en su mayoría, no cuentan con demasiadas funciones. Lo justo para dar un paseo por aquí por casa o construir unas más complicadas. Pero... ¿Para qué reinventar la rueda? Imagina que necesitas solucionar un problema mediante utilizando la programación: ¿Podría otra persona haber tenido la misma necesidad y haber resuelto ese problema? En ese caso ¿Estará disponible la solución?
Afortunadamente, el hecho de que Go sea software libre hace que se cree todo un ecosistema alrededor del mismo, con funciones que no están incluidos en el lenguaje, pero que añaden funcionalidad al mismo. Estos módulos generalmente están o en un repositorio, o referenciados en un directorio central de forma que se especifica desde dónde se descargan y qué otras dependencias tienen que cargarse antes de ser instalados. Estos módulos son conocidos como bibliotecas o, en el caso de Go, paquetes.
Un import path
es una cadena que identifica a un paquete y corresponde con
su ubicación, generalmente, dentro de tu workspace, a donde apunta la variable
GOPATH que vimos al principio de este libro. El nombre del paquete,
normalmente, tendrá un formato del tipo github.com/user/hello
. El primer
directorio es el repositorio, el segundo el usuario u organización que lo ha
desarrollado y, por último, el nombre del paquete.
Algunos de estos paquetes vienen preinstalados con el lenguaje. Por ejemplo,
es muy conocido el paquete fmt
, que permite mostrar mensajes por pantalla,
conocido especialmente al ser el utilizado en todos los "hola mundo" de Go.
Otro paquete, mucho más interesante, es net/http
: con este paquete puedes
crear aplicaciones web, incluso un servidor de ficheros. Si abres de nuevo
gore
, podrás importar un paquete escribiendo :import <paquete>
.
Por ejemplo:
gore> :import net/http
gore> :import fmt
Y ya tendrás acceso a toda la funcionabilidad que contiene.
También puedes instalar paquetes nuevos. Para instalar un paquete, solo tienes
que ejecutar go get <nombre de tu paquete>
.
¿Cómo escribo mis propios programas? Si te has hecho esta pregunta, puede entonces que te interese
Antes de entrar a hablar en mayor profundidad de los paquetes en Go, vamos a echar un ojo a la estructura que tiene el workspace. Contiene tres directorios:
src
: concentra el código fuente organizado como paquetes.pkg
: aquí se encuentran los objetos de los paquetes que se almacenan en el directoriosrc
.bin
: aquí se almacenan todos los programas ejecutables.
Tenemos que diferenciar entre dos situaciones algo diferentes:
- Quieres escribir un programa ejecutable
- Quieres escribir una biblioteca que sea reutilizable
Vamos a empezar por
En este caso, empezaremos indicando que nuestro programa pertenece al paquete
main
. Esto quiere decir, que nuestro código es el punto de entrada a nuestra
aplicación. Después puedes importar paquetes. Cuando quieres importar alguno,
simplemente escribes import
al principio de tu programa e indicas qué
paquetes quieres:
package main
import (
"net/http"
)
A esto, le seguirán todas las funciones que hayas querido declarar, así como
estructuras y variables globales. En algún momento, tendrás que declarar una
función main
. Es el verdadero punto de entrada del programa: cuando un
usuario ejecute tu programa, se llamará a esta función y se ejecutarán todas
las instrucciones que haya en él. Por ejemplo, el programa:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, `<html>
<body style='background:#000;'></body>
</html>`)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
Lanzará un servidor HTTP en el puerto 8080 de tu máquina. Cuando alguien
acceda a la dirección http://localhost:8080
desde un navegador, por ejemplo,
encontrará una página web en color negro.
Para ejecutar el anterior programa, guarda el código en un archivo que se
llame miservidor.go
y ejecútalo con go run miservidor.go
.