Sebelum bisa menyimpan data Post secara permanen, kita perlu menyambungkan project ke database. Di part ini kita akan pakai GORM, ORM paling populer di ekosistem Go, dengan database MySQL.
Install Dependency
go get gorm.io/gorm gorm.io/driver/mysql github.com/joho/godotenv
gorm.io/gorm— ORM utamanya.gorm.io/driver/mysql— driver MySQL untuk GORM.github.com/joho/godotenv— untuk membaca file.env, miripdotenvdi Node.js.
Konfigurasi Environment Variable
Buat file .env.example di root project sebagai referensi:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=blogfiber_dasar
Copy jadi .env dan sesuaikan dengan kredensial MySQL di komputer masing-masing:
cp .env.example .env
Jangan lupa buat databasenya lebih dulu:
CREATE DATABASE blogfiber_dasar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Tambahkan juga .env ke .gitignore supaya kredensial database tidak ikut ter-commit.
Membuat Koneksi Database
Buat file database/database.go:
package database
import (
"fmt"
"log"
"os"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func Connect() *gorm.DB {
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
os.Getenv("DB_USERNAME"),
os.Getenv("DB_PASSWORD"),
os.Getenv("DB_HOST"),
os.Getenv("DB_PORT"),
os.Getenv("DB_DATABASE"),
)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("gagal konek ke database: %v", err)
}
DB = db
return db
}
Penjelasan singkat:
- DSN (Data Source Name) dibentuk dari environment variable yang sudah kita siapkan.
parseTime=Truesupaya kolom bertipeDATETIME/TIMESTAMPotomatis ter-parse ketime.Timedi Go.- Variable
DBdisimpan sebagai package-level variable supaya bisa diakses dari package lain (handler, seeder, dll) tanpa perlu dioper manual terus-menerus.
Memanggil Koneksi di main.go
package main
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/joho/godotenv"
"blogfiber/database"
"blogfiber/routes"
)
func main() {
if err := godotenv.Load(); err != nil {
log.Println("tidak menemukan file .env, lanjut pakai environment variable yang ada")
}
database.Connect()
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{
"message": "Hello from GoFiber!",
})
})
routes.Setup(app)
log.Fatal(app.Listen(":3000"))
}
godotenv.Load() membaca file .env di root project dan memasukkan isinya ke environment variable proses. Kalau file .env tidak ditemukan (misalnya di production yang env variable-nya di-set langsung di server), kita cukup log peringatan saja, bukan menghentikan aplikasi.
Testing Koneksi
Jalankan servernya:
go run main.go
Kalau kredensial dan database sudah benar, server akan jalan normal tanpa error. Kalau salah (misalnya database belum dibuat, atau password salah), log.Fatalf di Connect() akan menghentikan aplikasi dengan pesan error yang jelas.
Database sudah tersambung, tapi kita belum punya tabel apapun. Di part berikutnya kita akan buat model Post, migration, dan seeder.
Bagian dari Series: GoFiber Dasar - Belajar Fundamental Lewat REST API Blog
Belajar konsep-konsep dasar GoFiber (routing, handler, GORM, MySQL, JWT auth) dengan membangun REST API blog sederhana dari nol - lengkap dengan auten...
Lihat Series Lengkap