Back to Blog

Go Financial Core System - Setup Database

29 Maret 20263 min read
Go Financial Core System - Setup Database

Di step ini kita akan:

  • Membuat tabel otomatis (auto migrate)
  • Menyambungkan Go ke database
  • Semua bisa langsung jalan tanpa ribet install manual

๐Ÿ” 1. Setup .env

Supaya config tidak ditulis di code

Buat file .env:

plaintext
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=fincore123
DB_NAME=fincore_db
DB_SSLMODE=disable
AUTO_MIGRATE=true

jangan lupa buat file .gitignore agar .env nya tidak masuk ke dalam git.

php
.env

โš™๏ธ 2. Load Config di Go

Install:

bash
go get github.com/joho/godotenv

configs/config.go

go
package configs

import (
	"log"
	"os"

	"github.com/joho/godotenv"
)

type Config struct {
	DBUrl       string
	AutoMigrate bool
}

func LoadConfig() *Config {
	err := godotenv.Load()
	if err != nil {
		log.Println("No .env file found")
	}

	dbUrl := "host=" + os.Getenv("DB_HOST") +
		" port=" + os.Getenv("DB_PORT") +
		" user=" + os.Getenv("DB_USER") +
		" password=" + os.Getenv("DB_PASSWORD") +
		" dbname=" + os.Getenv("DB_NAME") +
		" sslmode=" + os.Getenv("DB_SSLMODE")

	autoMigrate := os.Getenv("AUTO_MIGRATE") == "true"

	return &Config{
		DBUrl:       dbUrl,
		AutoMigrate: autoMigrate,
	}
}

๐Ÿงฑ 3. Setup Database Connection (GORM)

Install:

bash
go get gorm.io/gorm
go get gorm.io/driver/postgres

internal/infrastructure/db/db.go

go
package db

import (
	"log"

	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

func NewPostgres(dbUrl string) *gorm.DB {
	db, err := gorm.Open(postgres.Open(dbUrl), &gorm.Config{})
	if err != nil {
		log.Fatal("Failed connect database:", err)
	}

	return db
}

๐Ÿงพ 4. Auto Create Database

Install:

bash
go get github.com/lib/pq

internal/infrastructure/db/database_bootstrap.go

go
package db

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

	"github.com/fardannozami/fincore/configs"
	_ "github.com/lib/pq"
)

func EnsureDatabase(cfg *configs.Config) {
	dsn := fmt.Sprintf(
		"host=%s port=%s user=%s password=%s dbname=postgres sslmode=%s",
		os.Getenv("DB_HOST"),
		os.Getenv("DB_PORT"),
		os.Getenv("DB_USER"),
		os.Getenv("DB_PASSWORD"),
		os.Getenv("DB_SSLMODE"),
	)

	db, err := sql.Open("postgres", dsn)
	if err != nil {
		log.Fatal("Failed connect postgres default:", err)
	}

	defer db.Close()

	var exists bool
	query := "SELECT 1 FROM pg_database WHERE datname = $1"
	err = db.QueryRow(query, os.Getenv("DB_NAME")).Scan(&exists)

	if err != nil {
		// database belum ada โ†’ create
		_, err = db.Exec("CREATE DATABASE " + os.Getenv("DB_NAME"))
		if err != nil {
			log.Fatal("Failed create database:", err)
		}
		log.Println("โœ… Database created")
	} else {
		log.Println("โœ… Database already exists")
	}
}

๐Ÿงพ 5. Auto Migrate (Bikin Table Otomatis)

Update domain model (pakai GORM tag)

internal/domain/wallet.go

go
type Wallet struct {
    ID        string `gorm:"primaryKey"`
    UserID    string
    Balance   int64
}

internal/domain/ledger.go

go
type Ledger struct {
    ID        string `gorm:"primaryKey"`
    WalletID  string
    Amount    int64
    Type      string
    RefID     string
}

internal/domain/transaction.go

go
type Transaction struct {
    ID      string `gorm:"primaryKey"`
    FromID  string
    ToID    string
    Amount  int64
    Status  string
}

๐Ÿ”ฅ Function Auto Migrate

internal/infrastructure/db/auto_migrate.go

go
package db

import (
	"github.com/fardannozami/fincore/internal/domain"
	"gorm.io/gorm"
)

func AutoMigrate(db *gorm.DB) {
	db.AutoMigrate(
		&domain.Wallet{},
		&domain.Ledger{},
		&domain.Transaction{},
	)
}

๐Ÿš€ 6. Hubungkan di main.go

go
package main

import (
    "fincore/configs"
    "fincore/internal/infrastructure/db"
)

func main() {
    cfg := configs.LoadConfig()

    database := db.NewPostgres(cfg.DBUrl)

    if cfg.AutoMigrate {
        db.AutoMigrate(database)
    }

    println("๐Ÿš€ App running...")
}

๐Ÿงช 8. Cara Test

Jalankan:

bash
go run cmd/app/main.go
2026/03/29 21:14:19 โœ… Database created
๐Ÿš€ App running...

๐Ÿ‘‰ Kalau sukses:

  • Tidak ada error
  • database dan Table otomatis dibuat di PostgreSQL

โš ๏ธ Best Practice (WAJIB TAU)

โŒ Jangan Auto Migrate di Production

plaintext
AUTO_MIGRATE=false

๐Ÿ‘‰ Kenapa?

  • Bisa merusak data
  • Tidak aman

โœ… Gunakan Migration Tool (nanti di step lanjut)

Contoh:

  • goose
  • migrate

Article Series

Go Financial Core System

Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.

  1. 1
  2. 2
    Go Financial Core System - Setup Database
    29 Mar 20263 min readCurrent article
  3. 3