私はGoからMySQLデータベースに接続するための信頼性の高いソリューションを探しています。私はいくつかのライブラリを見てきましたが、完全性と現在のメンテナンスのさまざまな状態を判断することは困難です。複雑なニーズはありませんが、人々が頼りにしていること、MySQLに接続するための最も標準的なソリューションは何かを知りたいです。GoからMySQLに接続するには、どのような方法が推奨されますか?
答えて
いくつかのドライバが用意されていますが、あなただけ
- としてdatabase/sql APIを実装しているもの、それはクリーンで効率的な構文を提供し、
- それはあなたが後にコードを変更せずにドライバを変更することができ確実に考慮すべきです、インポートと接続を分離します。
2つの高速かつ信頼性の高いドライバーは、MySQLのために用意されています
は、私が接続して数ヶ月のために、プログラムが実行されている生産でそれらの両方を使用しました数百万の数字が失敗することはありません。
他のSQLデータベースドライバare listed on go-wiki。
インポート使用してMyMySQL:MyMySQL接続
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
と使用して終了:ゴーMySQLのドライバを使用して
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
インポート
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のドライバを使用して閉じること:複数の行を選択し、結果の配列を構築
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})
}
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
一つの行を選択
挿入は:
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
あなたは、MySQLと一緒に行くに作業は楽しい経験であることがわかります。私は問題を抱えていたことはありません、私のサーバーは、エラーやリークなしヶ月間実行します。ほとんどの関数が単純に可変引数を取るという事実は、多くの言語で面倒な作業を軽減します。
将来、別のMySQLドライバを使用する必要がある場合は、1つのgoファイルで2つの行、つまりインポートを行う行と接続を開く行を変更するだけでよいことに注意してください。取るに
いくつ 選択1行の例注意:この例では行方不明row.Next()
がある
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)
を。返される最初の行を取得するためにrow.Next()
に電話する必要があります。
また、何らかの形でデータミニマリズムを促進しようとするライブラリにいくらか柔軟性がありません。スキャンではない列を選択しようとすると、エラー(単に警告ではない)がスローされます
これは正確ではありません。QueryRow関数は* Rowを返します。この関数は、クエリが単一の行を返すことを示します。 Query()はrows.Next()を呼び出す必要がある(* Rows、error)を返します。 –
- 1. このようなプロジェクトを設定するには、どのような方法が推奨されますか?
- 2. NSArrayをiPhoneに保存するには、どのような方法が推奨されますか?
- 3. ファイルをtmpフォルダにコピーするには、どのような方法が推奨されますか?
- 4. commmercialアプリケーション用にWin32 APIをフックするには、どのような方法が推奨されますか?
- 5. 不正なGKEノードインスタンスを置き換えるには、どのような方法が推奨されますか?
- 6. Springでバックグラウンドでプロセスを実行するには、どのような方法が推奨されますか?
- 7. gRPC:C++で非同期サーバーをシャットダウンするには、どのような方法が推奨されますか?
- 8. CouchDBビューをソース管理下に置くには、どのような方法が推奨されますか?
- 9. Python GUIアプリケーションのユニットテストにはどのような方法が推奨されますか?
- 10. ビットセットの操作にはどのような方法が推奨されますか?
- 11. ファイルをローカルディレクトリからNFSディレクトリにコピーまたは移動するには、どのような方法が推奨されますか?
- 12. どのOSがプログラマに推奨されていますか?
- 13. LinuxでFlashアニメーションを作成するにはどのようなツールが推奨されますか?
- 14. PHPからpostgresqlデータベースに接続するには、どのような方法が適していますか?
- 15. window.navigator.userAgentは本当に推奨されなくなりますか?
- 16. ビューからセッションオブジェクトにアクセスするための推奨される方法
- 17. クラスから推奨されないメソッドのリストを取得する方法
- 18. Rails 3.2がMySQLに接続できるかどうかをチェックする方法?
- 19. ソケットが接続されるまでどのように接続しようとしていますか?
- 20. asp.netで301リダイレクトするのに推奨される方法は何ですか?
- 21. djangoプロダクションサーバにはvirtualenvが推奨されていますか?
- 22. 永続データベース接続はどのようにPHPに格納されますか?
- 23. 要求するアクションクラスをどのようにマッピングするのが推奨されていますか?
- 24. どのPyPyメモリプロファイラが推奨されていますか?
- 25. 実世界で推奨されるADO.NETバッチサイズはどのように決定されますか?
- 26. 推奨エンジンを実装するにはどうすればよいですか?
- 27. AがBにSSO接続されている場合、ドメインBのドメインAのWebサービスにアクセスするための推奨方法はありますか?
- 28. ASP.NET 5:すべての未処理の例外をキャッチしてログに記録するには、どのような方法が推奨されますか?
- 29. 推奨されていないアクセス許可を確認するにはどうすればよいですか?
- 30. PHPプロジェクトの継続的な統合に推奨されるサーバ
ありがとう、私はそれを試してみましょう。私は、ライブラリが実装できるデータベース/ SQLパッケージをGoに提供しています。 – GiantSquid
これは、他の言語(JDBCなど)に存在するものと似ていますが、よりクリーンで軽い構文です。 –
初心者のための優れたプライマー。ありがとう。 –