Paquetes de terceros y alias en Go (Golang)steemCreated with Sketch.

in #cervantes6 years ago

gopher wallpaper

En la publicación anterior estuvimos explorando varias de las características de los paquetes en Go, pueden considerar a esta una continuación directa.

Paquetes de terceros y alias

Si bien es cierto que la librería estándar de Go es bastante amplia y nos permite realizar una gran cantidad de operaciones sin recurrir a paquetes externos, en algunas ocasiones nos encontraremos con la necesidad de hacerlo. La filosofía de Go nos alienta a usar, hasta donde sea posible, los paquetes propios e incorporar paquetes de terceros sólo cuando sea necesario.

Paquetes de terceros

Para descargar estos paquetes podemos hacer uso del comando go get seguido de la ruta donde se encuentra el paquete, con frecuencia será un repositorio en GitHub, para este ejemplo haremos uso del paquete pq, que pueden descargar de la siguiente manera go get github.com/lib/pq. Este paquete es un driver que nos permite trabajar con el motor de base de datos PostgreSQL, de manera semejante podemos hacerlo con otros cómo MySQL o SQLite.

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres",
        "postgres://<user>:<password>@<host>:<port>/<name>?sslmode=disable")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    users := GetUsers(db)
    fmt.Println(users)
}

func GetUsers(db *sql.DB) []string {
    var user string
    var users []string

    dato, err := db.Query("select name from users")
    if err != nil {
        log.Fatal(err)
    }

    for dato.Next() {
        err = dato.Scan(&user)
        if err != nil {
            log.Println(err)
        }
        users = append(users, user)
    }
    return users
}



Este código nos permite realizar una conexión a la base de datos y consultar los nombres de una tabla llamada users, les digo esto sólo de manera informativa, en este momento lo importante no es que entiendan el código sino las importaciones, más adelante abordaremos estos temas detalladamente, pero preferí usar ejemplos más cercanos a casos reales.

Aunque es la primera vez que vemos el paquete database/sql, su uso es semejante a lo que hemos visto en casos anteriores, si algo requiere nuestra atención es el paquete pq, que importamos como github.com/lib/pq, de esta manera que usamos para importar paquetes externos, si necesitamos acceder a algún miembro del paquete podríamos hacerlo simplemente llamando a pq y luego a la función o variable a través de la notación de punto (<nombre-paquete>.<función>).

Sin embargo, este no es el caso, antes de la importación podemos ver un guión bajo que debe causarles curiosidad. El hecho es que el compilador de Go no nos permite conservar importaciones que no estamos usando, lo que generará errores en tiempo de compilación; reconozco que puede resultar molesto al inicio, pero no cuesta mucho acostumbrase y es beneficioso para nuestros programas. Además, la mayoría de los Editores de código y Entornos de desarrollo integrado ofrecen ayuda para estos casos de forma nativa o mediante complementos.

Si se lee detenidamente el programa, el paquete pq no se está utilizando explícitamente, pero es necesario para realizar la conexión a la base de datos, lo que claramente entra en conflicto con el comportamiento del compilador de Go que mencioné antes. Es aquí donde ese guión bajo tiene utilidad, al importarlo de esa forma nuestro programa podrá compilar sin problemas aunque no estemos usando el paquete. Es importante aclarar que, en caso de que el paquete realmente no tenga utilidad, lo más adecuado es borrarlo, incluso si piensas utilizarlo después, comentarlo también es un opción.

Alias

Otra opción interesante es la de darle un alias al paquete al momento de importarlo, lo que puede ser de utilidad para simplificar nombres o para evitar colisiones. Veamos un ejemplo.

package main

import f "fmt" // Podemos usar el paquete fmt usando el alias f

func main() {
    f.Println("Funciona...")  // Funciona...
}



También es posible incluir todo el paquete importado al espacio de nombres del paquete actual, colocando un punto antes de la importación de la siguiente manera.

package main

import . "fmt"

func main() {
    Println("También funciona...") // Funciona...
}



Puede parecer práctico, pero no es muy recomendable, reduce considerablemente la legibilidad del código y puede causar confusiones, sin embargo, es posible y por eso se los comparto. Espero haber solventado cualquier posible duda sobre el uso de los paquetes e importaciones en Go, además de generar expectativa con el ejemplo de conexión a la base de datos, así como con el servidor de la publicación pasada. Ambos pueden considerarse muy buenas pistas de mis planes para futuras publicaciones.

separator.png

Publicaciones relacionadas

  1. De Python a Go (Golang)

  2. Introducción al lenguaje de programación Go (Golang)

  3. Estructuras de control de flujo en Go

  4. Array y Slice en Go (Golang)

  5. Maps en Go (Golang)

  6. Punteros en Go (Golang)

  7. Importaciones y paquetes en Go (Golang)

Gracias por leer, espero que este artículo te resultara de provecho. Si así fue, no dudes en dejar un comentario, compartirlo y votar. Te invito a comentar cualquier duda o sugerencia, te aseguro que las leo todas. Así que, por favor, ayúdame a mejorar y continuar compartiendo contenido de calidad. Si te gusta la programación y/o la informática en general, te invito a formar parte de la comunidad Develop Spanish dónde compartimos contenido de esa naturaleza y totalmente en español. Hasta la próxima.

banner-steemit.jpg

Sort:  

Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!

Reply !stop to disable the comment. Thanks!

Gracias por tus consejos, te invito a leer mi mas reciente articulo, seria de gran ayuda alguna recomendación. Mucho éxito y bendiciones

Me alegra que te resulte de utilidad, claro que me pasaré por tu perfil. Nos leemos, saludos.

Este post fue votado por la comunidad y trail @developspanish, comunidad encargada de curar a los programadores, traductores de software y bloggers de informática y tecnología de habla hispana.

¿Quieres recibir mejores recompensas en tus post de informática, tecnología o programación, ayúdanos delegando algo de SP:
1 SP, 5 SP, 10 SP

Congratulations @orlmicron! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the number of comments

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.26
TRX 0.25
JST 0.040
BTC 92903.81
ETH 3331.70
USDT 1.00
SBD 3.29