良い加減Goでmysqlに接続するときにDSNを直書きするのはやめない?

4423 ワード

よく見るDB接続例

Go言語を用いてmysqlに接続する際、DBの情報を文字列で直書きしているケースを良くみる

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main(){
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/db?charset=utf8&parseTime=true")
    // 以下省略
}

今回紹介したいDB接続例

mysqlパッケージにはDSNを組み立てる用のメソッドが用意されているのでそちらを利用するほうが楽だと感じている

import (
	"database/sql"
	"time"

	"github.com/go-sql-driver/mysql"
)

func connectDB() *sql.DB {
	jst, err := time.LoadLocation("Asia/Tokyo")
	if err != nil {
		// エラーハンドリング
	}
	c := mysql.Config{
		DBName:    "db",
		User:      "user",
		Passwd:    "password",
		Addr:      "localhost:3306",
		Net:       "tcp",
		ParseTime: true,
		Collation: "utf8mb4_unicode_ci",
		Loc:       jst,
	}
	db, err := sql.Open("mysql", c.FormatDSN())
    // 以下省略
}

個人的にこの関数の存在を知る前には毎度毎度接続情報の記載順を調べていたが、この関数を利用するようになってからはかなり楽に記載出来るようになったのでオススメ