Golang Database Driver

Golang memiliki beberapa driver untuk koneksi database, diantarnya :

1. MySQL

Untuk instalasi dan set up bisa klik link berikut.

2. PostgreSQL

Untuk instalasi dan set up bisa klik link berikut.

Berikut link code lengkap contoh koneksi database MySQL dan PostgreSQL di Golang.

Golang Database Pool

Database pool digunakan untuk management access database di Golang. Di package "database/sql", golang menyediakan 4 parameter management access seperti berikut.

db.SetMaxIdleConns(10)                  // setMaxIdelConns -> pengaturan jumlah koneksi minimal yang dibuat saat aplikasi connect ke database
db.SetMaxOpenConns(50)                  // setMaxOpenConns -> pengaturan jumlah koneksi maksimal dibuat
db.SetConnMaxIdleTime(5 * time.Minute)  // setConnMaxIdleTime -> contoh ada 10 koneksi tidak digunakan selamat durasi waktu tertentu, maka akan di close
db.SetConnMaxLifetime(60 * time.Minute) // setConnMaxLifeTime -> contoh koneksi sudah mencapai waktu tertentu, maka akan di close atau memperbaruhi koneksi yang lama

Code lengkap-nya dapat dilihat dibawah ini

client.go
package client

import (
	"fmt"
	"log"
	"time"

	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	_ "github.com/jackc/pgx/v5/stdlib"
)

func GetDBConnection(driver string) (db *sql.DB) {
	var connString string
	if driver == "mysql" {
		// "username:password@tcp(host:port)/database_name"
		connString = fmt.Sprintf("%s:%s@tcp(%s:%d)/%v",
			"root", "@Ugm428660", "localhost", 3306, "bootcamp")
	} else if driver == "pgx" {
		// urlExample := "postgres://username:password@localhost:5432/database_name"
		connString = fmt.Sprintf("postgres://%s:%s@%s:%d/%s",
			"postgres", "@Ugm428660", "localhost", 5432, "postgres")
	}

	db, err := sql.Open(driver, connString)
	if err != nil {
		panic(err)
	}
	log.Printf("Running database")

	db.SetMaxIdleConns(2)
	db.SetMaxOpenConns(5)
	db.SetConnMaxIdleTime(10 * time.Minute)
	db.SetConnMaxLifetime(60 * time.Minute)

	return
}

Close koneksi database

Jika SetMaxIdleConns dan SetMaxOpenCons diinisiasi value-nya, koneksi perlu segera mungkin di close agar bisa digunakan untuk menjalankan query di function lain.

defer db.Close()

Penerapan db.Close() dapat dilihat di materi selanjutnya.

Reference:

Last updated