gpt4 book ai didi

model-view-controller - golang 中的连接数据库

转载 作者:IT王子 更新时间:2023-10-29 01:58:34 25 4
gpt4 key购买 nike

在 mvc structur golang (beego,revel) 中,我可以在哪里放置语言、连接数据库等初始化文件?

我尝试在 Controller 中使用,但效果不佳。

一个好的解决方案是创建基本 Controller 并将所有初始化连接、语言等放在这里吗?还是有其他方法(更好)?

最佳答案

你可以使用全局变量,但我不建议这样做。在数据库逻辑分布在多个包中的更复杂的应用程序中会发生什么?最好使用依赖注入(inject):

文件:main.go

package main

import (
"bookstore/models"
"database/sql"
"fmt"
"log"
"net/http"
)

type Env struct {
db *sql.DB
}

func main() {
db, err := models.NewDB("postgres://user:pass@localhost/bookstore")
if err != nil {
log.Panic(err)
}
env := &Env{db: db}

http.HandleFunc("/books", env.booksIndex)
http.ListenAndServe(":3000", nil)
}

func (env *Env) booksIndex(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, http.StatusText(405), 405)
return
}
bks, err := models.AllBooks(env.db)
if err != nil {
http.Error(w, http.StatusText(500), 500)
return
}
for _, bk := range bks {
fmt.Fprintf(w, "%s, %s, %s, £%.2f\n", bk.Isbn, bk.Title, bk.Author, bk.Price)
}
}

文件:模型/db.go

package models

import (
"database/sql"
_ "github.com/lib/pq"
)

func NewDB(dataSourceName string) (*sql.DB, error) {
db, err := sql.Open("postgres", dataSourceName)
if err != nil {
return nil, err
}
if err = db.Ping(); err != nil {
return nil, err
}
return db, nil
}

关于model-view-controller - golang 中的连接数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427299/

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