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.
Publicaciones relacionadas
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.
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!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Gracias por tus consejos, te invito a leer mi mas reciente articulo, seria de gran ayuda alguna recomendación. Mucho éxito y bendiciones
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Me alegra que te resulte de utilidad, claro que me pasaré por tu perfil. Nos leemos, saludos.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
¿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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit