Dalam kasus ini, kita akan membuat migrasi menggunakan package "github.com/subosito/gotenv" untuk mengelola variabel lingkungan dari file .env
. Berikut adalah struktur proyek yang sesuai dengan persyaratan yang telah Anda tentukan:
Copy project-folder/
├── go.mod
├── main.go
├── .env
└── src
└── Config
└── db.go
└── Controllers
└── products.go
└── Models
└── products.go
└── helper
└── migration.go
Copy package helper
import (
"github.com/jinzhu/gorm"
"github.com/subosito/gotenv"
"os"
"project-folder/src/Config"
"project-folder/src/Models"
)
func LoadEnv() {
err := gotenv.Load(".env")
if err != nil {
panic("Error loading .env file")
}
}
func MigrateDatabase() {
Config.DB.AutoMigrate(&Models.Product{})
}
Copy package main
import (
"fmt"
"net/http"
"project-folder/src/Config"
"project-folder/src/Controllers"
"project-folder/src/helper"
)
func main() {
// Load environment variables from .env file
helper.LoadEnv()
// Initialize database connection
Config.InitDB()
defer Config.DB.Close()
// Run database migration
helper.MigrateDatabase()
// Set up routes and start the server
http.HandleFunc("/product", Controllers.GetAllProducts)
http.HandleFunc("/product/create", Controllers.CreateProduct)
http.HandleFunc("/product/update", Controllers.UpdateProduct)
http.HandleFunc("/product/delete", Controllers.DeleteProduct)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
serverAddr := fmt.Sprintf(":%s", port)
fmt.Println("Server started at port", serverAddr)
http.ListenAndServe(serverAddr, nil)
}
Copy package Config
import (
"github.com/jinzhu/gorm"
"github.com/subosito/gotenv"
"os"
)
var DB *gorm.DB
func InitDB() {
// Load environment variables from .env file
err := gotenv.Load()
if err != nil {
panic("Error loading .env file")
}
// Get database credentials from environment variables
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")
// Establish database connection
DB, err = gorm.Open("postgres", "host="+host+" port="+port+" user="+user+" dbname="+dbName+" password="+password+" sslmode=require")
if err != nil {
panic("failed to connect database")
}
}
Copy DB_HOST=pg-20772f0a-laravel.aivencloud.com
DB_PORT=21980
DB_USER=avnadmin
DB_PASSWORD=AVNS_F21ay59vewp2Aprj_pT
DB_NAME=defaultdb
PORT=8080
Dengan langkah-langkah ini, proyek Anda sekarang memanfaatkan package "github.com/subosito/gotenv" untuk mengelola variabel lingkungan dari file .env
dan menggunakan file helper/migration.go
untuk melakukan migrasi basis data. Pastikan Anda telah menginstal package "github.com/subosito/gotenv" menggunakan perintah go get github.com/subosito/gotenv
sebelum menjalankan aplikasi Anda.