2016-09-08 15 views
4

Beego ORMは今のところ不完全です(たとえば、外部キーの制約はサポートしていません)。だから私はgormをBeegoと使うことに決めました。それを行う正しい方法は何ですか?私はgormのサンプルコードを見てきました:gormとBeegoの使い方

import (
    "github.com/jinzhu/gorm" 
    _ "github.com/jinzhu/gorm/dialects/postgres" 
) 

func main() { 
    db, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmode=disable password=mypassword") 
    defer db.Close() 
} 

しかし、すべてのコントローラ機能で毎回データベースに接続する必要がありますか?長いポーリング接続のようなものを使用する方法はありますか?

答えて

3

GORMは

DBはゼロ以上 基礎となる接続のプールを表すデータベース・ハンドルであるフード下gorm.DBに埋め込まsql.DBタイプを使用します。複数のゴルーチンで同時に使用することは安全です。 sqlパッケージは、接続 を自動的に作成して解放します。アイドル状態の接続のフリープールも維持されます。

だから、あなたのコードでグローバルに取得したDBを使用することができ、 あなたが使用するトランザクションので

tr:=db.Begin() 
+0

もっと丁寧な例を教えてください。他のファイル/パッケージで "取得されたDB"(正しく理解すれば、 'main.go'で定義されています)がどのように正確にアクセス可能になるのでしょうか? – EugZol

1

要求処理に分離レベルをしたい場合@Uvelichitelが指摘したように、あなたのオプションは、あなたを定義することですdb接続をグローバルレベルで使用し、目的の場所から使用することができます(主な機能として、接続を開いて結果を照会するモデルレイヤー)。

ですから、基本的に自分のDB接続ロジックを含むファイルを持つことができ:あなたはmain.goからdb.Connectを呼び出す

// appname/conn.go 

package db 

import (
    "github.com/jinzhu/gorm" 
    ... 
) 

var (
    // this one gonna contain an open connection 
    // make sure to call Connect() before using it 
    Conn *gorm.DB 
) 

func Connect(dbConnString string) (*gorm.DB, error) { 
    db, err := gorm.Open("postgres", dbConnString) 
    Conn = db 
    return db, err 
} 

した後、あなたのアプリケーションのどこからでも開かれた接続db.Connを(自由に使用することがあなたを確認してくださいこのパッケージを使用場所にインポートします)。

import "appname/db" 

func main() { 
    conn, _ := db.Connect("host=localhost user=postgres ...") 
    // db.Conn is initialized and ready for usage anywhere else 

同じ結果が直線がグローバル変数宣言と接続ロジックを移動させる、単一main.goファイル内で達成することができます。

+0

ビーゴが自分のモデルをロードするのを止めるにはどうしたらいいですか? –

関連する問題