在学习使用golang 操作数据库的过程中,使用sqlx 库查询数据库遇到报错信息
源码如下:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var DB *sqlx.DB
func initDb() error {
var err error
dsn := "root:123456@tcp(127.0.0.1:3306)/golang"
DB, err = sqlx.Open("mysql", dsn)
if err != nil {
return err
}
DB.SetMaxOpenConns(100)
DB.SetMaxIdleConns(16)
return nil
}
type User struct {
Id int64 `db:id`
Name sql.NullString `db:name`
Age int `db:age`
}
func testSqlxQuery() {
sqlstr := "select id,name,age from user where id=?"
var user User
err := DB.Get(&user, sqlstr, 3)
if err != nil {
fmt.Printf("select failed, err:%v\n", err)
return
}
fmt.Printf("user:%#v\n", user)
}
func main() {
err := initDb()
if err != nil {
fmt.Printf("init db failed, err:%v\n", err)
return
}
testSqlxQuery()
}
go build 后,执行报错:
missing destination name id in *main.User
在使用sql 库查询数据库没问题,使用sqlx反而出现错误,经比对发现,是定义结构体对象时,tag标记未加双引号导致,加引号后问题解决。
type User struct {
Id int64 `db:"id"`
Name sql.NullString `db:"name"`
Age int `db:"age"`
}
针对此类问题要特别注意,在使用tag的使用切记增加双引号,避免出现此类低级错误。