sql.Openを(再利用)がsql.DBゴー/ Golang sql.DBは機能に
*型の変数を返します。私は、すべてのデータベースが
を呼び出すようにする必要があり10個の他の関数を呼び出す関数を持っていますそれは、効率的な/より補正することである:
- すべての機能に* sql.DBポインタを送ったり、
- は、それぞれの機能に新しい* sql.DBオブジェクトを作成します
func DoLotsOfThings() {
db, _ := sql.Open()
defer db.Close()
DoTask1(db)
DoTask2(db)
}
または
func DoLotsOfThings() {
DoTask1()
DoTask2()
}
func DoTask1() {
db, _ := sql.Open()
defer db.Close()
}
func DoTask1() {
db, _ := sql.Open()
defer db.Close()
}
を意味
理由があります。私はhttp://code.google.com/p/odbcを使用しています。これは、それぞれの機能が独自のものでなければならないと信じており、ドライバの内部構造に頼ることができます。
EDIT
REドライバの破損、それだけで高トラフィック環境で起こります。そして、それは、例えば、10分ほどの時間が経過した後にのみ起こります。これは、ドライバを使用して動作を停止させる何らかのメモリリークがあると私に信じさせる。しかし、* sql.DBのすべてのインスタンスに対してdb.Close()を延期するので、この問題を解決するために他に何ができるか分かりません。
andybalholmはそれだけで私は起動していないとき、何かを実行しようとした後、壊れているため、接続プーリングは、正確であると思われ、内部的に処理されると言うsql.Open()
私は囲碁のアプリを実行したままにした場合どんな種類のSQLクエリも実行することはできませんが、別のGoテストを別々に実行してMSSQLに接続してクエリを実行しようとすると、動作します。
再現可能なサンプルをhttps://code.google.com/p/odbc/issues/listに投稿できる場合は、修正を試みます。 – alex