Go から MySQL データベースに接続するための信頼できるソリューションを探しています。いくつかのライブラリを見てきましたが、完全性と現在のメンテナンスのさまざまな状態を判断するのは困難です。複雑なニーズはありませんが、人々が何に依存しているか、または MySQL に接続するための最も標準的なソリューションは何かを知りたいです。
70712 次
2 に答える
266
いくつかのドライバーが利用可能ですが、データベース/SQL APIを実装するドライバーのみを考慮してください。
- クリーンで効率的な構文を提供し、
- これにより、インポートと接続を除いて、コードを変更せずに後でドライバーを変更できるようになります。
MySQL では、高速で信頼性の高い 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 を使用するのは楽しい経験であることがわかります。問題は一度もありませんでした。サーバーは何ヶ月もエラーやリークなしで動作しています。ほとんどの関数が単純に可変数の引数を取るという事実は、多くの言語で面倒なタスクを軽減します。
将来、別の MySQL ドライバーを使用する必要がある場合は、1 つの go ファイルで 2 行を変更するだけで済みます: インポートを実行する行と接続を開く行です。
于 2012-07-06T06:41:20.380 に答える