sql.Register("sqlWithHooks", sqlhooks.Wrap(r.Driver(), &Hooks{}))
// Connect to the registered wrapped driver
db, err := sql.Open("sqlWithHooks", ":memory:")
if err != nil {
fmt.Println("error",err)
}
rows, err := db.Query("SELECT id,name,zone_z_id,dimension,price FROM gift_box_z ")
if err != nil {
fmt.Println("inside the error .........................",err)
}
运行此代码后,连接信息字符串中出现“:memory:”之后缺少“ =”的错误。谁能告诉我我在这里所做的事情有什么问题吗?
答案 0 :(得分:4)
sql.Open()
的第二个参数需要一个连接字符串。它具有以下形式:
fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
它包含打开与Postgres的连接所需的信息。
答案 1 :(得分:0)
sql.Open()需要2个内容:“ driverName”和“ dataSourceName”。以sqlhooks为例,他们使用sqlite作为数据库。除此之外,他们使用了go-sqlite3,如果您仔细查看在行号886上的文件sqlite3.go。您会看到datasourcename':memory:',这意味着我们选择在内存中使用sqlite D b。
“ dataSourceName”将根据选择的数据库而有所不同。它的基本含义是数据源名称格式的连接字符串。
原因为何有效 fmt.Sprintf(“主机=%s端口=%d用户=%s密码=%s dbname =%s sslmode =禁用”, 主机,端口,用户,密码,dbname)