为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:centos7.5
在windows上正常,在linux上报错
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x92ac5e]
goroutine 1 [running]:
dm.(*Properties).GetTrimString(0x0, 0xa0f831, 0xc, 0x0, 0x0, 0x0, 0x0)
/home/oracle/go/src/dm/zv.go:80 +0x3e
dm.(*DmConnector).mergeConfigs(0xc0001d4000, 0xa237a0, 0x50, 0xfa1bb8, 0x0)
/home/oracle/go/src/dm/n.go:766 +0x885
dm.(*DmDriver).openConnector(0xc0000a2e80, 0xa237a0, 0x50, 0x9d2c60, 0xc0000d2101, 0x7fd33100f0d8)
/home/oracle/go/src/dm/p.go:78 +0xaf
dm.(*DmDriver).OpenConnector(0xc0000a2e80, 0xa237a0, 0x50, 0x7fd33100f0d8, 0xc0000a2e80, 0x582701, 0x120)
/home/oracle/go/src/dm/p.go:62 +0x3f
database/sql.Open(0xa0a281, 0x2, 0xa237a0, 0x50, 0x2, 0xc0000d21a8, 0x5b3b00)
/opt/go/src/database/sql/sql.go:771 +0x112
main.connect(0xa0a281, 0x2, 0xa237a0, 0x50, 0xec13c0, 0xc000000180, 0xc00008df78)
/home/oracle/test.go:57 +0x56
main.main()
/home/oracle/test.go:17 +0x4f
exit status 2
代码如下:
package main
// 引入相关包
import (
"database/sql"
_ "dm"
"fmt"
)
var db *sql.DB
var err error
func main() {
driverName := "dm"
//dataSourceName := "dm://SYSDBA:SYSDBA@localhost:5236"
dataSourceName := "dm://base:BASEbase123.@10.10.101.112:5236?compatibleMode=oracle&stmtPoolSize=300"
if db, err = connect(driverName, dataSourceName); err != nil {
fmt.Println(err)
return
}
if err = queryTable(); err != nil {
fmt.Println(err)
return
}
if err = disconnect(); err != nil {
fmt.Println(err)
return
}
}
/* 查询产品信息表 */
func queryTable() error {
var n int
var sql = "SELECT 1+1 "
rows, err := db.Query(sql)
if err != nil {
return err
}
defer rows.Close()
fmt.Println("queryTable results:")
for rows.Next() {
if err = rows.Scan(&n); err != nil {
return err
}
fmt.Printf("n= %d\n", n)
}
return nil
}
/* 创建数据库连接 */
func connect(driverName string, dataSourceName string) (*sql.DB, error) {
var db *sql.DB
var err error
if db, err = sql.Open(driverName, dataSourceName); err != nil {
return nil, err
}
if err = db.Ping(); err != nil {
return nil, err
}
fmt.Printf("connect to \"%s\" succeed.\n", dataSourceName)
return db, nil
}
func disconnect() error {
if err := db.Close(); err != nil {
fmt.Printf("db close failed: %s.\n", err)
return err
}
fmt.Println("disconnect succeed")
return nil
}
试试创建这个文件
vim /etc/dm_svc.conf #创建达梦的配置文件
TIME_ZONE=(480)
LANGUAGE=(cn)