Go 新手,来自 .Net-land,所以请耐心等待......希望能得到一些关于构建我的 Go 应用程序的指导,特别是在管理和重用数据库连接方面。
我已将我的 db 代码拆分为一个包,以允许将 db-lookups 放入像存储库层一样处理 sql 查找的包中。我希望能够灵活地将我的 db 层与我的应用程序服务分离,以便在必要时轻松替换我的数据库。
基本上,我正在寻找有关如何以及何时处理 sql connect 并在应用程序中保存 sql.DB 指针的一些指导。我需要在 main.go 中保留一个全局指针还是可以在我的 mysql 包中管理连接?
这是我的代码:
package mysqlstorage
import (
"database/sql"
"fmt"
"log"
"types"
)
var db *sql.DB
func Connect() {
db, dberr := sql.Open(“<CONNECTION_STRING>“)
if dberr != nil {
fmt.Println(dberr)
}
}
func SaveUser(u types.User) {
// use db here!
....
}
func GetUser(id string) types.User {
// use db here!
....
}
在运行我的 main.go 并使用我的 userservices 包尝试保存用户时,我遇到了一个问题,我似乎失去了我的指针范围:-
2015/05/03 17:49:08 http: panic serving [::1]:50106: runtime error: invalid memory address or nil pointer dereference goroutine 7 [running]: net/http.func·011()
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1130 +0xbb database/sql.(*DB).conn(0x0, 0x10, 0x0, 0x0)
/usr/local/Cellar/go/1.4.2/libexec/src/database/sql/sql.go:634 +0x7ae database/sql.(*DB).Ping(0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.4.2/libexec/src/database/sql/sql.go:462 +0x3a mysqlstorage.SaveUser(0x0, 0xc20805425a, 0x7, 0xc208054280, 0x11, 0xc208054268, 0x6, 0xc208054274, 0x5)
/Users/<USERNAME>/Desktop/go/<APPNAME>/api/src/mysqlstorage/mysqlstorage.go:24
+0x35 services.CreateUser(0x57c148, 0xc2080563c0, 0xc2080329c0)
/Users/<USERNAME>/Desktop/go/<APPNAME>/api/src/services/userservices.go:30
+0x398 net/http.HandlerFunc.ServeHTTP(0x3d02a0, 0x57c148, 0xc2080563c0, 0xc2080329c0)
任何指导将不胜感激!谢谢你们!
慕尼黑8549860
PIPIONE
相关分类