📝

Goでmysqlに接続するときにDSNを直書きしない方法

2022/09/22に公開

よく見る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())
    // 以下省略
}

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

GitHubで編集を提案

Discussion