gpt4 book ai didi

database - 我应该在哪里存储全局数据库实例?

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:20 27 4
gpt4 key购买 nike

在go中初始化数据库实例后,应将其存储在哪里?我想从请求处理程序访问它们。

// server.go
storage, err := config.GetFileStorage(viper.GetViper())
if err != nil {
log.Fatal(fmt.Sprintf("Failed to configure the file storage: %v\n", err))
}

db, err := config.GetDatabase(viper.GetViper())
if err != nil {
log.Fatal(fmt.Sprintf("Failed to configure the database: %v\n", err))
}

这只是main函数中的局部变量。我现在如何通过处理程序将它们暴露给go包?

最佳答案

您可以将数据库连接包装在一个结构中,并使其返回您的http处理程序。像这样:

package main

import (
"database/sql"
"log"
"net/http"
)

type DBManager struct {
db *sql.DB
}

func (m *DBManager) HelloHandler() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
rows, err := m.db.Query("SELECT hello FROM world")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer rows.Close()
for rows.Next() {
// do stuff
}
})
}

func main() {
db, err := sql.Open("", "")
if err != nil {
panic(err)
}
m := DBManager{db: db}
http.Handle("/", m.HelloHandler())
log.Fatal(http.ListenAndServe(":8080", nil))
}

还要确保您的对象可以处理并发访问,例如* sql.DB https://golang.org/pkg/database/sql/#DB

如果您希望/需要在处理程序之间共享更多信息,可以查看环境模式: http://www.jerf.org/iri/post/2929

关于database - 我应该在哪里存储全局数据库实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com