ホームページ > バックエンド開発 > Golang > Go でデータベース接続を管理するためのシングルトン パターンを実装するにはどうすればよいですか?

Go でデータベース接続を管理するためのシングルトン パターンを実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-01 13:29:02
オリジナル
824 人が閲覧しました

How can I implement a Singleton pattern for managing database connections in Go?

データベース管理のシングルトン パターン

シングルトン パターンは、クラスにインスタンスが 1 つだけ存在することを保証し、そのインスタンスへのグローバル アクセス ポイントを提供します。このコンテキストでは、データベースへの単一接続を作成し、アプリケーションのどの部分からでもアクセスできるようにします。

シングルトン データベース インスタンスを作成するには、次の手順に従います。

  1. 実行するデータベース操作を定義するインターフェイスを作成します。
  2. インターフェイスを実装し、データベース接続を含むエクスポートされていない型を作成します。
  3. パッケージ init() 関数を使用して、アンエクスポート型を使用して、インターフェイスを実装するグローバル変数を初期化します。

これを Go で実装する方法の例を次に示します。

<code class="go">package dbprovider

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

type DBManager interface {
    AddArticle(article *article.Article) error
    // Add other methods
}

type dbManager struct {
    db *gorm.DB
}

var dbManagerInstance DBManager

func init() {
    db, err := gorm.Open("sqlite3", "../articles.db")
    if err != nil {
        log.Fatal("Failed to init db:", err)
    }
    dbManagerInstance = &dbManager{db: db}
}</code>
ログイン後にコピー

シングルトン データベース インスタンスを使用するにはでは、次の関数を呼び出すことができます:

<code class="go">func GetDBManager() DBManager {
    return dbManagerInstance
}</code>
ログイン後にコピー

これにより、データベース操作の実行に使用できる共有データベース マネージャー インスタンスが返されます。

例外の処理

するにはGORM ライブラリからの例外を処理するには、GetErrors() メソッドを使用できます。このメソッドは、最後のデータベース操作中に発生したエラーのスライスを返します。エラーがない場合、スライスは空になります。

AddArticle メソッドで、このメソッドを使用してエラーをチェックし、適切にエラーを返すことができます。

<code class="go">func (mgr *dbManager) AddArticle(article *article.Article) (err error) {
    mgr.db.Create(article)
    if errs := mgr.db.GetErrors(); len(errs) > 0 {
        err = errs[0]
    }
    return
}</code>
ログイン後にコピー

以上がGo でデータベース接続を管理するためのシングルトン パターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート