
Introduction
The Go programming language, sometimes referred to as Go lang, is making strong gains in popularity. Chances are if you are a Go developer, you will have to interact with SQL at some point in your project. This blog post will show how to connect to a PostgreSQL database from Go using database/sql
package.
What is PostgreSQL?
PostgreSQL, is a free and open-source relational database management system that uses and extends the SQL language combined with many features that safely store and scale the most complicated data workload. PostgreSQL allows user-defined functions to be written in other languages including C and Go. For example, you can define your own data types, build out custom functions, even write code from different programming languages without recompiling your database.
If you’re new to PostgreSQL project, I’ll recommend you to please refer the documentation.
What is Go lang?
Go is an open source, statically typed, compiled programming language designed at Google. Its is syntactically similar to C, but with overcomes lot of it’s limitations. It is often referred to as “Golang” because of its domain name, golang.org, but the proper name is Go. There are multiple areas where Go shines, like statically, strongly typed with a great way to handle errors, compiles down to one binary, super fast compilation, open source and above all simplicity.
To learn more about Go, please refer Go docs
Prerequisites
To be able to achieve our objective i.e. Connecting to PostgreSQL from Go , there are some prerequisites. Sticking to core subject of this blog, I won’t cover them, however I’m providing with some references
Install PostgreSQL and setup an instance – https://www.postgresqltutorial.com/install-postgresql/
Install Go and configure workspace – https://www.callicoder.com/golang-installation-setup-gopath-workspace/
For purpose of this tutorial, I’m using Postgres 11 and Go 1.13.xx
Objective – Connecting to PostgreSQL from Go
In next few steps, I’ll demonstrate how to build a simple command line tool (CLI) using Go lang that can connect to a PostgreSQL instance. So let’s Go (pun intended)
Step 1. Gather PostgreSQL Instance details
host = "localhost"
port = 5432
user = "postgres"
password = "secure-password"
dbname = "connect-db"
Step 2. Install the github.com/lib/pq package
go get -u github.com/lib/pq
Go’s standard library was not built to include any specific database drivers. So we need to install a third party package named lib/pq
.
While Go provides us with the database/sql package that we will be utilizing to interact with our database, the standard libraries do not include drivers for every SQL database variant. Instead this is left up to the community, and from my experience the lib/pq
package is the best driver for Postgres.
Step 3. Putting together our package pg-connect.go
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
Step 4. Configuring database connection string in our code
Inside main()
function, we’re are going to create a connection string, containing all the information required to connect to our postgres database.
func main() {
connStr := "user=postgres dbname=connect-db password=secure-password host=localhost sslmode=disable"
}
Depending on your specific setup, you may want to change sslmode to enable or disable (default value is enabled).
Step 5. Creating a connection to our database
At this time our code is ready for a handshake with database using the connection string connStr
. To make this work, we will use sql.Open()
function, that takes 2 arguments – a driver name and connecting string. At this step, we’ll also add error handling to ensure we signal a panic if anything goes wrong.
db, err := sql.Open("postgres", connStr )
if err != nil {
panic(err)
}
defer db.Close()
Hoping our connection details are validated, next we’re going to call Ping()
method on sql.DB
object to test our connection. db.ping()
will force open a database connection to confirm if we are successfully connected to the database.
err = db.Ping()
if err != nil {
panic(err)
}
Step 6. Putting it all together
package main
// connecting to a PostgreSQL database with Go's database/sql package
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
func main() {
/*
variables required for connection string: connStr
user= (using default user for postgres database)
dbname= (using default database that comes with postgres)
password = (password used during initial setup)
host = (hostname or IP Address of server)
sslmode = (must be set to disabled unless using SSL)
*/
connStr := "user=postgres dbname=connect-db password=secure-password
host=localhost sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Printf("\nSuccessfully connected to database!\n")
}
Next steps…
In the next post, we’ll see how to interact with the data within the database using Go lang.
Like what I write? Please join my mailing list, and I’ll let you know whenever I write another post. No spam, I promise! 👨💻
3 thoughts on “Connecting to PostgreSQL from Go lang project”