为了账号安全,请及时绑定邮箱和手机立即绑定

运行时错误:无效的内存地址或零指针取消引用(2)

运行时错误:无效的内存地址或零指针取消引用(2)

Go
一只斗牛犬 2023-06-12 14:36:49
我是Go的新手,需要帮助!在 PostgreSQL 数据库中,我有一个名为factors. 此表有 2 列(factor_id和factor_name)。现在我已经成功地从 Go 应用程序连接到 PostgreSQL 数据库。当我试图在控制台中发出基于查询的 GET 请求时,我看到了错误。http://localhost:8000/api/factors/?limit=5&offset=1我哪里弄错了?请帮我解决这个问题。控制器/factors.go:package controllersimport (    "encoding/json"    "fmt"    "net/http"    "restify/models"    "restify/utils")var GetFactors = func(res http.ResponseWriter, req *http.Request) {    data := models.Factors{}    err := models.GetFactors(&data, req.URL.Query().Get("limit"), req.URL.Query().Get("offset"))    if err != nil {        fmt.Println(err.Error())        http.Error(res, err.Error(), 500)        return    }    out, err := json.Marshal(data)    if err != nil {        fmt.Println(err.Error())        http.Error(res, err.Error(), 501)        return    }    resp := make(map[string]interface{})    resp["Dictionaries"] = string(out)    utils.Respond(res, resp)}
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

似乎问题是在此处分配数据库时:

DB, err := sql.Open("postgres", dbURL)

数据库在新范围内定义,因此这会创建一个局部变量而不是设置 pkg 级变量。因此,代码Open()建立了与数据库的连接。

试试这个:

var err error
DB, err = sql.Open("postgres", dbURL)

这是官方报价:

与常规变量声明不同,短变量声明可以重新声明变量,前提是它们最初是在同一块(如果块是函数体,则为参数列表)中较早声明的,具有相同的类型,并且至少有一个非空变量是新的。因此,重新声明只能出现在多变量简短声明中。重新声明不会引入新变量;它只是为原始值分配了一个新值。


查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信