我的应用程序连接到另一台服务器上的Maria Db,因此一旦启动引擎,它通过查询数据库获取数据,我要做的是,我的应用程序每5秒从DB查询一次,我刚刚通过以下方式终止了maria DB服务
service mariadb stop在我的应用程序中执行此操作之后,将引发以下错误的查询:
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x54c9a6]
goroutine 50 [running]:
database/sql.(*Rows).close(0x0, 0x0, 0x0, 0x0, 0x0)
/home/go1.14/go/src/database/sql/sql.go:3063 +0x76
database/sql.(*Rows).Close(0x0, 0x0, 0x0)
/home/go1.14/go/src/database/sql/sql.go:3059 +0x33
panic(0x8d03e0, 0xf3dd00)
/home/go1.14/go/src/runtime/panic.go:969 +0x166
database/sql.(*Rows).Next(0x0, 0x1)
/home/go1.14/go/src/database/sql/sql.go:2744 +0x30
path-to-file/loadConfig.LoadFromDB(0x9ff760, 0xc0000240a0, 0xc000192000, 0xf, 0x0, 0x0, 0x0, 0x0)
path-to-file/loadConfig/loadConfig.go:65 +0x1a2我的代码如下所示:
func LoadFromDB(Ctx context.Context, Conn *sql.DB, modId int) (map[string][]string, map[string]string, error) {
rows, err := Conn.Query(getQueryFromFile("QUERY"),modId)
if err != nil {
log.Println("LOAD CONFIG: Error establishing connection to DB")
}
defer rows.Close()
configValues := make(map[string][]string)
configTimeVal := make(map[string]string)
for rows.Next() {
configParam := ""
configVal := ""
var configLastUpdated string
eror := rows.Scan(&configParam, &configVal, &configLastUpdated)
if eror != nil {
return nil, nil, eror
} else {
configValues[configParam] = append(configValues[configParam], configVal)
configTimeVal[configParam] = configLastUpdated
}
}
return configValues, configTimeVal, nil
}当maria db服务停止时,你们能帮助我处理这种情况吗?
发布于 2020-09-14 15:00:11
当错误为非零时,您丢失了一个return,因此该函数一直在运行。试试这个:
if err != nil {
log.Println("LOAD CONFIG: Error establishing connection to DB")
return nil, nil, err
}您还需要处理来自Next()函数的错误;请参阅文档:
下一步准备使用扫描方法读取下一个结果行。它在成功时返回true,如果没有下一个结果行或准备过程中发生错误,则返回false。应咨询Err以区分这两种情况。
https://stackoverflow.com/questions/63886791
复制相似问题