golang sqlx err missing destination name id in *main.User

在学习使用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的使用切记增加双引号,避免出现此类低级错误。

发布了66 篇原创文章 · 获赞 8 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/gnufre/article/details/104022584
今日推荐