⛺
【Go】DB設定をyamlファイルに外出しする
GoのプロジェクトでDB設定をyamlなどgit管理外のファイルに記述する方法のメモ書き。
ディレクトリ構成
プロジェクトルート/
└ database/
├ database.go
├ db_config.go
└ database.yml
実際のコード
DB設定を読み込むやつ
database/db_config.go
package database
import (
"os"
"github.com/go-yaml/yaml"
)
type DBConfig struct {
Protocol string `yaml:"protocol"`
Host string `yaml:"host"`
Port string `yaml:"port"`
Name string `yaml:"name"`
User string `yaml:"user"`
Password string `yaml:"password"`
Charset string `yaml:"charset"`
}
func config() (c *DBConfig) {
b, err := os.ReadFile("database/database.yml")
if err != nil {
panic(err)
}
yaml.Unmarshal(b, &c)
return
}
DBに接続する
database/database.go
package database
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var db *gorm.DB
func Init() {
c := config()
db = open(c)
}
func Get() *gorm.DB {
return db
}
func Close() {
d, _ := db.DB()
d.Close()
}
func open(c *DBConfig) *gorm.DB {
eu := c.User + ":" + c.Password + "@" + c.Protocol + "(" + c.Host + ":" + c.Port + ")/" + c.Name + "?charset=" + c.Charset + "&parseTime=True&loc=Local"
d, err := gorm.Open(mysql.Open(eu), &gorm.Config{})
if err != nil {
panic(err)
}
return d
}
yamlにDB情報を記述する
中身は適宜書き換える。
database/database.yml
protocol: tcp
host: localhost
port: 3306
name: sample
user: root
password: pass
charset: utf8mb4
使い方
サーバ起動時にdatabase.Init()
、アクセス時にdatabase.Get()
する
package main
import (
"sample/database"
)
func main() {
database.Init()
...
}
package hoge
import (
"sample/database"
)
func Sample() {
db := database.Get()
// db.Where(...)
...
}
Discussion