1. ホーム
  2. mysql

[解決済み] GoからMySQLに接続するおすすめの方法は?

2022-04-24 18:47:06

質問

GoからMySQLデータベースに接続するための信頼できるソリューションを探しています。いくつかのライブラリを見かけましたが、完全性と現在のメンテナンスの異なる状態を判断することは困難です。私は複雑なニーズを持っていませんが、私は人々が何を頼りにしているか、またはMySQLに接続するための最も標準的なソリューションが何であるかを知りたいのです。

解決方法は?

ドライバはいくつかありますが データベース/SQL としてAPIを提供します。

  • は、クリーンで効率的な構文を提供します。
  • インポートと接続を除けば、コードを変更することなくドライバを変更することができます。

MySQL 用の高速で信頼性の高い 2 つのドライバが利用可能です。

私はこの2つを本番で使っていますが、数ヶ月間、何百万もの接続数で、失敗することなくプログラムが動いています。

その他のSQLデータベースドライバ はgo-wikiに掲載されています。 .

MyMySQL を使用している場合のインポート :

import (
    "database/sql"
    _ "github.com/ziutek/mymysql/godrv"
)

Go-MySQL-Driverを使用した場合のインポート。

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

MyMySQL を使用した接続と終了 :

con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns

Go-MySQL-Driverを使った接続と終了 :

con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()

1行を選択します。

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

複数行を選択し、結果を配列として構築する :

rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
    err = rows.Scan(&ida, &idb)
    if err != nil { /* error handling */}
    items = append(items, &SomeStruct{ida, idb})
}

挿入する。

_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)

GoとMySQLの連携が楽しいことはおわかりいただけたと思います : I 決して 私のサーバーは数ヶ月間、エラーも漏れもなく動いています。ほとんどの関数が可変数の引数を取るだけなので、多くの言語では面倒な作業が軽減されます。

将来、他の MySQL ドライバを使用する必要がある場合は、1 つの go ファイルで 2 行を変更するだけでよいことに注意してください: インポートを行う行と接続を開く行です。