在 Go HTTP 处理程序中管理 MySQL 连接
Go 中的 database/sql 包处理数据库连接并自动管理连接池。当调用 sql.Open() 时,它返回一个管理连接池的句柄。该句柄根据需要建立新连接,确保始终有可用的连接用于数据库操作。
共享数据库连接句柄
在您的代码中,您创建了一个main() 函数中类型为 *sql.DB 的全局变量 db。该变量表示连接池句柄。要与 HTTP 处理程序共享它,您可以将数据库句柄作为参数传递给处理程序函数。
在 HTTP 处理程序中使用连接句柄
在 HomeHandler 中函数中,您可以使用作为参数传递的数据库句柄来访问数据库连接:
import ( "database/sql" "fmt" ) func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) { var msg string err := db.QueryRow("SELECT msg FROM hello WHERE page=?", "home").Scan(&msg) if err != nil { fmt.Fprintf(w, "Database Error!") } else { fmt.Fprintf(w, msg) } }
HTTP 处理程序注册
在 main() 函数中,在注册 HTTP 处理程序时,您可以将数据库句柄作为参数传递:
import ( "github.com/gorilla/mux" ) func main() { fmt.Println("starting up") db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb") if err != nil { log.Fatalf("Error on initializing database connection: %s", err.Error()) } r := mux.NewRouter() r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler http.Handle("/", r) http.ListenAndServe(":8080", nil) }
按照以下步骤,您可以在 Go 中的 HTTP goroutine 之间有效共享 MySQL 连接。 Database/sql 包的自动连接池可确保最佳性能和资源管理。
以上是如何在 Go HTTP 处理程序之间共享 MySQL 连接句柄?的详细内容。更多信息请关注PHP中文网其他相关文章!