- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Go 的新手,来自 .Net-land,所以请多多包涵...希望获得一些关于构建我的 Go 应用程序的指导,特别是在管理和重用数据库连接方面。
我已将我的数据库代码拆分到一个包中,以允许将数据库查找到像存储库层一样处理 sql 查找的包中。我希望能够灵活地将我的数据库层与我的应用程序服务分离,这样我就可以在必要时轻松替换我的数据库。
基本上,我正在寻找有关如何以及何时在应用程序中处理 sql 连接和保存 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)
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1265 +0x41 github.com/gorilla/mux.(*Router).ServeHTTP(0xc20803c140, 0x57c148, 0xc2080563c0, 0xc2080329c0)
/Users/<USERNAME>/Desktop/go/<APPNAME>/api/src/github.com/gorilla/mux/mux.go:98
+0x297 net/http.(*ServeMux).ServeHTTP(0xc20803a720, 0x57c148, 0xc2080563c0, 0xc2080329c0)
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1541 +0x17d net/http.serverHandler.ServeHTTP(0xc2080543c0, 0x57c148, 0xc2080563c0, 0xc2080329c0)
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1703 +0x19a net/http.(*conn).serve(0xc208056320)
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1204 +0xb57 created by net/http.(*Server).Serve
/usr/local/Cellar/go/1.4.2/libexec/src/net/http/server.go:1751 +0x35e
任何指导将不胜感激!谢谢大家!
最佳答案
我认为您的问题是 Connect()
范围内的 db
是 shadowed由于您使用了 :=
运算符。如果您更改方法以声明 dberr
var:
func Connect() {
var dberr error
db, dberr = sql.Open(“<CONNECTION_STRING>“)
if dberr != nil {
fmt.Println(dberr)
}
}
您的代码将按预期工作
关于mysql - 高语 : Losing scope in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034384/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
我正在处理 SQL 和用户输入。因此,我使用 glue 库来处理参数化查询。 但是,为了保持简洁,我将所有内容包装在一个函数中: safeQuery SELECT * FROM foo WHERE
我的拓扑是这样的:kafka(p:6)->reduce(p:6)->db writer(p:12)(其中p:是并行)。 我让它在单个节点“集群”上运行 taskmanager.numberOfTask
我有一个 Singleton 类,我试图用它来存储从 Internet 下载的图像,以便我可以随时访问它。工作流程是我登录到 Facebook,并将图像下载到 Singleton 类。一切都很好,它显
首先,这是我的声明和初始化: int** GameField = 0; GameField = new int*[mapsize]; for(int i = 0; i
我正在使用 pthreads 编写一个多线程演示程序,其中一个线程将数据加载到 STL 队列中,另一个线程从中读取数据。听起来微不足道,对吧?不幸的是,插入队列的数据正在消失。我对多线程并不陌生,也不
我有一个函数 (GetArgs) 使用可变参数模板对它的参数(每个指针)进行排序,将每个参数发送到另一个函数 (GetArg),该函数已为每种类型重载(目前是整数和 float )。每种类型的重载函数
我成功地使用蓝牙连接了 iPhone 和 Mac。 iPhone 是核心,Mac 是外围设备。连接后,两者都可以通信(iPhone 正在订阅一些特征,由 Mac 宣传)。 但是,经过一段时间(随机?)
这是一个足够简单的问题,令我感到惊讶的是,我找不到任何对之前问过它的人的引用。和this不一样,也不受 this discussion 的保护. 我有一个 4-d 矩阵(尺寸为 16x10x15x39
我正在使用两个组件,并且我正在使用这种模式:子组件应尽可能保持隔离 - 它正在处理自己的验证错误。父组件应该检查子组件之间存在依赖关系的错误。因此,就我而言:密码字段和密码确认字段。 这是我的代码
我有一个应用程序,用户可以通过两种方式浏览 map (例如缩略图和列表中的 map ) /map/browse /map/list 现在,我想将这些 View 限制为仅显示特定用户的 map ,例如通
我有这种类型和这些功能: data Tag a where Tag :: (Show a, Eq a, Ord a, Storable a, Binary a) => a -> BL.Byte
我写了一个非常简单的 Flink 流作业,它使用 FlinkKafkaConsumer082 从 Kafka 获取数据。 protected DataStream getKafkaStream(Str
几天前我不小心删除了我的.bashrc。我尝试重新创建它,但不幸的是我仍然遇到一些问题。我以前使用的 Java 调试器不再正常工作,因为它找不到这个类: aetherboard:Home shwang
我正在尝试序列化/反序列化以下内容 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME) @JsonSubTypes({ @JsonSubTypes.Type(v
我目前正在编写一个非常小的Java程序来实现一次性pad,其中pad(或 key )本身是使用SecureRandom对象生成为一系列字节的,该对象使用一个简单的字符串进行播种SHA-512 算法。
您可以通过在物理设备上下载并运行此代码来重现错误:https://github.com/Hoya/RCCPeakableImageView 它所做的是通过 UIImageView 子类向图像添加视差效
我在使用 google analytis 时遇到了一些问题。我们有一个网站,用户可以在登陆页面上填写个人信息(姓名、地址、电子邮件等)。该网站位于http://link.提交表单后,用户将被定向到 h
我正在创建一个可以使用键盘控件旋转的 3D 立方体。但是在旋转之后,每张脸的部分失去了交互性(鼠标事件不会在包含的元素上注册)。任何人都知道可能导致该问题的原因是什么? 这很难解释,所以这里有一个测试
我今天在调试 SWIG 类型映射时遇到了一个有趣的问题。任何人都想告诉我为什么 Visual C++ 2008 在从 ourLib::Char * 转换为 const ourLib::Char * &
我是一名优秀的程序员,十分优秀!