若干Golangの波に乗り遅れた感のあるポリドッグです。
PHPerな僕は他の言語を殆ど触ったことないので、視野を広げるということで、最近Golangを触りはじめたわけです。
しかし、Golangは超初心者の僕にとってはどうやって書いていいのやらさっぱりです。。
そんな僕がGORMの接続をどうするか考えてtomlを使って接続情報を定義してみました。
GORMとは
ご存知だとは思いますが、とりあえず。
- GORMはgolangのORマッパーで。
- マイグレーションの機能や、アソシエーションも出来るので非常に便利。
Tomlファイルを用意する
まずはデータベースの接続用のtomlファイルを作りました。
1
2
3
4
5
6
7
8
|
[Database]
driver = "mysql"
server = ""
user = "user1"
password = "user1"
database = "testgo"
charset = "utf8"
parseTime = "true"
|
いたって普通のtomlファイルです。
今回はMySQLに接続する事を想定しています。
Tomlファイルを読み込む
「BurntSushi/toml」を使って読み込みます。
ファイル自体はtoml.DecodeFile
メソッドで読み込めます。
他にもconfig用の構造体が必要なので、以下の様な形に用意します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
type Config struct {
Database DbConfig
}
type DbConfig struct {
Driver string
Server string
User string
Password string
Database string
Charset string
ParseTime string
}
|
そしてこんな感じでDecodeFileを使って読み込みます。
1
2
3
4
5
|
var config Config
_, err := toml.DecodeFile("config.toml", &config)
if err != nil {
panic("unloaded config file")
}
|
Gormを使ってデータベースへ接続
config周りの実装ができたので、次にデータベースの接続の実装してみました。
1
2
3
|
connect := fmt.Sprintf("%s:%s@%s/%s?charset=%s&parseTime=%s", config.Database.User, config.Database.Password, config.Database.Server, config.Database.Database, config.Database.Charset, config.Database.ParseTime)
gorm.Open(config.Database.dirver, connect)
|
これでデータベース自体には接続できます。
しかしこれはダサいですね。
メソッドを利用してもう少しかっこいい形にしましょう。
1
2
3
|
func (d DbConfig) DSN() string {
return fmt.Sprintf("%s:%s@%s/%s?charset=%s&parseTime=%s", d.User, d.Password, d.Server, d.Database, d.Charset, d.ParseTime)
}
|
こんなメソッドを用意すれば綺麗になりますね。
1
|
gorm.Open(config.Database.dirver, config.Database.DSN())
|
さらにもう少し洗練させてみましょう。
1
2
3
|
func (c Config) Db() (string, string) {
return c.Database.Driver, c.Database.DSN()
}
|
このようにconfigにメソッド定義することによって、もう少し綺麗になります。
最後に
とりあえずマイグレーションするところまで実装してみました。
うまく構造体とメソッドを使えば、すっきりした実装できそうだなぁーっておもったり。