ホームページ > バックエンド開発 > Golang > Go の関数からデータベース接続にアクセスするにはどうすればよいですか?

Go の関数からデータベース接続にアクセスするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-29 12:01:29
オリジナル
698 人が閲覧しました

How to Access a Database Connection from a Function in Go?

Go の関数内でオープン データベース接続を参照する

Go でデータベースを操作する場合、データベースへの接続を確立するのが一般的ですmain 関数で接続し、アプリケーション全体でこの接続を利用します。しかし、データベース操作を関数内にカプセル化したい場合はどうなるでしょうか?

次のシナリオを考えてみましょう。 main 関数で、データベース接続を開きます:

<code class="go">func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    ...
}</code>
ログイン後にコピー

次に、渡された構造体に基づいてデータベースに行を追加する関数を作成します:

<code class="go">func addRow(row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor)
    return err
}</code>
ログイン後にコピー

しかし、ここに課題があります。addRow() 関数は、main 関数で定義された db 変数を認識しません。

データベース接続参照の処理方法

依存アプリケーションの性質上、addRow() 関数内でデータベース接続を参照するにはいくつかのオプションがあります:

  • グローバル変数: db をグローバル変数として宣言します。これは、addRow() 関数を含め、プログラム内のどこからでもアクセスできることを意味します。グローバル変数の使用は慎重に行う必要があることに注意してください。
  • 関数パラメータ: db 接続をパラメータとして addRow() 関数に渡します。これにより、接続をより明示的に制御できるようになり、必要に応じて別のデータベース接続を使用できるようになります。
<code class="go">func addRow(db *sql.DB, row Room) error</code>
ログイン後にコピー
  • メソッド:データベース接続を確立し、addRow() をその構造体のメソッドにします。このアプローチでは、データベース接続が構造体内にカプセル化されます。
<code class="go">type dbConn struct {
    db *sql.DB
}

func (conn dbConn) addRow(row Room) error</code>
ログイン後にコピー

使用例

グローバル変数アプローチの使用法を示してみましょう:

<code class="go">var db *sql.DB

func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    // create room Room{}
    err = addRow(room)
    checkErr(err)
}</code>
ログイン後にコピー

db をグローバル変数として宣言すると、プログラム内のどこからでも addRow() 関数にアクセスできるようになります。

選択するアプローチは、ユーザーの特定の要件に合わせて調整する必要があることに注意してください。アプリケーション、そのアーキテクチャ、パフォーマンスに関する考慮事項。

以上がGo の関数からデータベース接続にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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