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

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

Barbara Streisand
リリース: 2024-10-28 23:02:30
オリジナル
889 人が閲覧しました

How to Access a Database Connection from Within a Function in Golang?

Golang の関数内からデータベース接続にアクセスする

Golang では、通常、データベース操作はデータベースへの接続を開くことから始まります。ただし、データベースとの対話を必要とする関数を操作する場合、オープン接続を参照する必要があることがよくあります。

問題:

次のシナリオを考えてみましょう:

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

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>
ログイン後にコピー

この例では、main 関数は db で表されるデータベース接続を開きます。ただし、addRow 関数は main 関数の外部で定義されているため、db に直接アクセスできません。

解決策:

この状況を処理するには、いくつかの方法があります:

グローバル アクセス:

関数の外で宣言して db 変数をグローバルにします。たとえば:

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

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

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>
ログイン後にコピー

このアプローチでは、内部のすべての関数が許可されます。 db 変数にアクセスするには同じパッケージを使用します。ただし、グローバル変数はリソース リークや予期しない動作を引き起こす可能性があるため、長時間実行されるアプリケーションには推奨されません。

パラメータの受け渡し:

db 変数をパラメータとして渡します。 addRow 関数に追加します:

<code class="go">func addRow(db *sql.DB, row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>
ログイン後にコピー

このメソッドは、データベース接続のスコープをより詳細に制御し、より適切な依存関係の注入を可能にします。

Struct のメソッド:

もう 1 つのオプションは、データベース接続を格納する構造体のメソッドとして addRow を定義することです。

<code class="go">type Database struct {
    db *sql.DB
}

func (db *Database) AddRow(row Room) error {
    stmt, err := db.db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>
ログイン後にコピー

このアプローチはデータベース接続をカプセル化し、より構造化されたアクセス方法を提供します。

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

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