GolangでDSNを使用しMySQLに接続する方法
Ethan Miller
Product Engineer · Leapcell

GoでMySQLデータベースに接続するには、database/sqlパッケージとMySQLドライバ(github.com/go-sql-driver/mysqlなど)を使用します。この接続を確立する上で重要なのは、必要な接続パラメータを含むデータソース名(DSN)を正しくフォーマットすることです。この記事では、GoでMySQL接続のためにDSNをフォーマットする方法を包括的に解説します。
Key Takeaways
- GoのMySQL DSNフォーマットは、必須の接続パラメータを含む構造化された構文に従います。
mysql.ConfigとFormatDSNを使用すると、DSNの可読性が向上し、エラーが減少します。- 追加のDSNパラメータで、タイムアウトや文字セットなど、接続の動作をカスタマイズできます。
DSNフォーマットの理解
DSNは、データベースの接続パラメータを指定する文字列です。GoにおけるMySQL DSNの一般的な形式は以下の通りです。
[username[:password]@][protocol[(address)]][/dbname][?param1=value1&...¶mN=valueN]
ここで:
username: MySQLのユーザー名。password: MySQLユーザーのパスワード。protocol: 使用するネットワークプロトコル(tcpやunixなど)。address: ネットワークアドレス。TCP接続の場合はhost[:port]の形式、またはUnixドメインソケットへのパスを使用できます。dbname: 接続するデータベースの名前。param: キーと値のペアの形式の追加の接続パラメータ。
DSNの例
一般的なDSNは次のようになります。
user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
この例では:
user: MySQLのユーザー名。password: MySQLユーザーのパスワード。tcp: TCPプロトコルを使用することを示します。127.0.0.1:3306: MySQLサーバーはlocalhostのポート3306でホストされています。dbname: 接続するデータベースの名前。charset=utf8mb4: 文字セットをutf8mb4に設定します。parseTime=True:time.Time値の解析を有効にします。loc=Local: タイムゾーンをローカルタイムゾーンに設定します。
GoでのDSNの構築
DSN文字列を手動で構築する代わりに、mysqlドライバが提供するConfig構造体を使用して、プログラムでDSNを構築できます。このアプローチは、コードの可読性を高め、エラーのリスクを軽減します。
方法は次のとおりです。
package main import ( "database/sql" "log" "time" "github.com/go-sql-driver/mysql" ) func main() { // 接続プロパティをキャプチャします。 cfg := mysql.Config{ User: "user", Passwd: "password", Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", AllowNativePasswords: true, ParseTime: true, Loc: time.Local, } // データベースハンドルを取得します。 db, err := sql.Open("mysql", cfg.FormatDSN()) if err != nil { log.Fatal(err) } defer db.Close() // データベースにPingして、接続を確認します。 if err := db.Ping(); err != nil { log.Fatal(err) } log.Println("データベースに正常に接続されました!") }
このコードでは:
mysql.Config構造体を使用して接続プロパティを定義します。
FormatDSNメソッドは、提供された構成に基づいてDSN文字列を構築します。
sql.Openを使用してデータベースハンドルを作成し、db.Ping()を使用して接続を確認します。
追加の接続パラメータ
DSNには、接続の動作をカスタマイズするためのさまざまなパラメータを含めることができます。一般的に使用されるパラメータには以下が含まれます。
charset: 接続の文字セットを指定します。collation: 接続の照合順序を設定します。timeout: 新しい接続の最大待機時間を定義します。readTimeout: I/O読み取りタイムアウトを設定します。writeTimeout: I/O書き込みタイムアウトを設定します。
サポートされているパラメータの包括的なリストについては、Go-MySQL-Driverのドキュメントを参照してください。
FAQs
フォーマットは[username[:password]@][protocol[(address)]][/dbname][?param1=value1&...]です。
mysql.Configを使用して、cfg.FormatDSN()を呼び出してプログラムでDSNを構築します。
一般的なパラメータには、charset、parseTime、timeout、readTimeout、およびwriteTimeoutが含まれます。
結論
DSNを適切にフォーマットすることは、GoアプリケーションとMySQLデータベース間の接続を確立するために不可欠です。mysql.Config構造体とそのFormatDSNメソッドを活用することで、明確でエラーのない方法でDSNを構築し、堅牢で保守可能なデータベース接続設定を確保できます。
Goプロジェクトのホスティングには、Leapcellをお選びください。
Leapcellは、ウェブホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発できます。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い — リクエストも料金も発生しません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムメトリクスとロギング。
容易なスケーラビリティと高いパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ — 構築に集中できます。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ



