Postgresql DefaultServeMux中的SQL给出错误
我正在尝试在Go中使用RESTAPI。当查询放置在主处理程序中(显示在终端中)时,查询可以工作,但当移动到所需的处理程序时,浏览器中会出现错误Postgresql DefaultServeMux中的SQL给出错误,postgresql,rest,go,Postgresql,Rest,Go,我正在尝试在Go中使用RESTAPI。当查询放置在主处理程序中(显示在终端中)时,查询可以工作,但当移动到所需的处理程序时,浏览器中会出现错误 localhost:8080/您遇到的是变量阴影的典型情况 :=创建了一个新的db变量,该变量会隐藏您的包级别db变量。当包级别db变量保持为nil指针时,db的设置值仅存在于main函数的范围内,因此当您试图在索引处理程序中对nil执行方法调用时,会出现死机 Getuser处理程序工作的原因与DefaultServeMux无关,只是因为您没有尝试访问n
localhost:8080/您遇到的是变量阴影的典型情况
:=
创建了一个新的db
变量,该变量会隐藏您的包级别db
变量。当包级别db
变量保持为nil指针时,db
的设置值仅存在于main函数的范围内,因此当您试图在索引处理程序中对nil
执行方法调用时,会出现死机
Getuser处理程序工作的原因与DefaultServeMux无关,只是因为您没有尝试访问nil值的成员函数
解决此问题的方法是在主函数中预先声明err
变量,并将:=
更改为简单赋值=
func main() {
// ...
var err error
// this will now correctly set your package level variable
db, err = sql.Open("postgres", psqlInfo)
if err != nil {
log.Fatalln(err)
}
// ...
}
错误发生在哪一行?另外,代码中索引函数
中的行的错误处理部分。下一步()
不完整,您可以检查并更正。请发布完整的错误日志。当您有nil
指针时,经常会发生此错误。@pie-oh-pah-Done@vahdet“另外,代码中的行索引函数中的错误处理部分。Next()不完整,您可以检查并更正它。”有任何提示吗?您的全局db
为nil
。在Go:=
中声明了一个新变量,因此主函数中的db
与保持不变的全局db
是不同的变量。然后,调用db.Query的index
处理程序正在对*db
类型的nil
值调用该方法。不是你想要的。你有没有去掉if err!=梅因的零?如果你正在处理你所有的错误,你就不应该这么做。在go中,您不能声明变量,也不能不使用它。仔细检查,看看它是否是其他语句的一部分
func main() {
// ...
var err error
// this will now correctly set your package level variable
db, err = sql.Open("postgres", psqlInfo)
if err != nil {
log.Fatalln(err)
}
// ...
}