DEV Community

Romulo Gatto
Romulo Gatto

Posted on

Introduction to Database Connectivity with Go (SQL and NoSQL)

Introduction to Database Connectivity with Go (SQL and NoSQL)

Whether you are building a simple web application or a complex enterprise system, the ability to connect to databases is essential. In this guide, we will explore how to connect and interact with both SQL and NoSQL databases using GoLang.

Connecting to SQL Databases

GoLang provides excellent support for connecting to various SQL databases such as MySQL, PostgreSQL, SQLite, and more. To get started, make sure you have the respective database installed on your machine.

Installing the Required Packages

To connect to an SQL database in GoLang, you need to install the appropriate database driver package. Let's take MySQL as an example:

$ go get github.com/go-sql-driver/mysql
Enter fullscreen mode Exit fullscreen mode

Similarly, you can replace mysql in the command above with postgres or sqlite depending on your chosen database.

Establishing a Connection

Once you have installed the required packages, it's time to establish a connection with your SQL database:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/database_name")
    if err != nil {
        panic(err.Error())
    }

    defer db.Close()

    // Start interacting with the database here
}
Enter fullscreen mode Exit fullscreen mode

Here "username:password@tcp(localhost:3306)/database_name" is the connection string format for MySQL. Make sure you replace it with your actual values.

Executing Queries

Now that we have established a connection successfully let's query our SQL database:

rows, err := db.Query("SELECT * FROM users")
if err != nil {
   panic(err.Error())
}

defer rows.Close()

for rows.Next() {
   // Process each row of data
   // ...
}
Enter fullscreen mode Exit fullscreen mode

This code snippet demonstrates how to execute a simple SELECT query and iterate through the returned rows.

Connecting to NoSQL Databases

GoLang also offers excellent support for connecting to various NoSQL databases like MongoDB, Redis, Couchbase, and more. Let's focus on connecting with MongoDB in this guide.

Installing the Required Packages

To connect with MongoDB in GoLang, we need to install the official MongoDB driver:

$ go get go.mongodb.org/mongo-driver/mongo
Enter fullscreen mode Exit fullscreen mode

Establishing a Connection

Now it's time to establish a connection with your MongoDB database:

import (
    "context"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")

    client, err := mongo.Connect(context.TODO(), clientOptions)
    if err != nil {
        panic(err.Error())
    }

    defer client.Disconnect(context.TODO())

   // Start interacting with the database here
}
Enter fullscreen mode Exit fullscreen mode

Make sure you replace "mongodb://localhost:27017" in options.Client().ApplyURI(...) with your actual database information.

Executing Queries

After establishing a connection, let's learn how to run queries against our MongoDB database:

collection := client.Database("mydb").Collection("users")

ctx := context.TODO()

// Insert documents into the collection
_, err = collection.InsertOne(ctx, bson.D{
    {Key: "name", Value: "John"},
    {Key: "age", Value: 25},
})

if err != nil {
    panic(err.Error())
}

// Query documents from the collection
curFindDocuments, _ := collection.Find(ctx, bson.M{"age": bson.M{"$gt": 20}})
defer curFindDocuments.Close(ctx)

for curFindDocuments.Next(ctx) {
   // Process each document 
   // ...
}
Enter fullscreen mode Exit fullscreen mode

In this code snippet, we insert a document into the collection and then query for documents with an age greater than 20.

Wrapping Up

Congratulations! You have learned the basics of connecting to both SQL and NoSQL databases using GoLang. With this knowledge, you can now start building powerful applications that leverage database connectivity. Keep exploring GoLang's rich ecosystem for additional database drivers and advanced features to enhance your development experience. Happy coding!

Top comments (0)