首頁  >  文章  >  後端開發  >  如何從 Golang 中的函數存取開啟的資料庫連線?

如何從 Golang 中的函數存取開啟的資料庫連線?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-30 10:05:02142瀏覽

How to Access an Open Database Connection from a Function in Golang?

如何從 Golang 中的函數引用開啟的資料庫連線

在許多 Golang 應用程式中,需要與資料庫互動。通常,資料庫連接是在主函數中開啟的。但是,在定義需要存取資料庫的函數時,您可能會遇到引用開啟的資料庫連線的問題。

要解決此問題,有幾種方法可用:

選項1:全域資料庫連接

解決方案是將資料庫連接聲明為全域變量,使其在整個程式中(包括在函數內)可存取。此方法很簡單,但對於具有多個資料庫連接的複雜應用程式來說可能並不理想。

選項 2:函數參數

另一個選項是將資料庫連接作為函數的參數。這種方法提供了對使用哪個資料庫連接的明確控制,並允許建立可以使用不同資料庫的函數。

選項 3:函數方法

或者,您可以將該函數定義為保存資料庫連接的結構中的方法。這種技術提供了一種更物件導向的方法,並確保函數始終可以存取正確的資料庫連接。

範例程式碼:

全域資料庫連線:

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

func main() {
    db = sql.Open("sqlite3", "./house.db")
    room := Room{}
    err := addRoom(room)
    if err != nil {
        // Error handling
    }
}

func addRoom(room Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    if err != nil {
        return err
    }

    _, err = stmt.Exec(room.Name, room.Size, room.WindowCount, room.WallDecorationType, room.Floor)
    return err
}</code>

函數參數:

<code class="go">func addRow(db *sql.DB, row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    if err != nil {
        return err
    }

    _, err = stmt.Exec(row.Name, row.Size, row.WindowCount, row.WallDecorationType, row.Floor)
    return err
}</code>

函數參數:

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

func (conn dbConn) addRow(row Room) error {
    stmt, err := conn.db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    if err != nil {
        return err
    }

    _, err = stmt.Exec(row.Name, row.Size, row.WindowCount, row.WallDecorationType, row.Floor)
    return err
}</code>
函數參數:

函數參數:函數參數:函數方法:最佳方法取決於您的應用程式的具體要求以及所需的靈活性和控制等級。這些選項提供了從 Golang 程式中的函數存取開啟的資料庫連接的各種方法。

以上是如何從 Golang 中的函數存取開啟的資料庫連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn