Back to Blog
๐ 1. Setup
๐ 6. Hubungkan di
Go Financial Core System - Setup Database
29 Maret 20263 min read

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=truejangan 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/godotenvconfigs/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/postgresinternal/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/pqinternal/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.
- 1Go Financial Core System - System Design29 Mar 20264 min read
- 2Go Financial Core System - Setup Database29 Mar 20263 min readCurrent article
- 3Go Financial Core System - Handling Race Condition30 Mar 202616 min read