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