数据结构定义
type User struct {
ID int64 `db:"ID"`
Name sql.NullString `db:"name"`
Age int `db:"age"`
}
为了简便说明问题,假定了一个user表,有ID,Name 和Age 三个字段,Name是可以为空的
初始化数据库连接func initDb() error {
var err error
dsn := "root:root@tcp(127.0.0.1:3306)/test"
DB, err = sqlx.Open("mysql", dsn)
if err != nil {
return err
}
DB.SetMaxOpenConns(100)
DB.SetMaxIdleConns(16)
return nil
}
其中: SetMaxOpenConns用于设置最大打开的连接数,如果想设为不限制,设置为0就行。 SetMaxIdleConns用于设置空闲的连接数。
获取数据 sqlstr := "select ID,name,age from user where ID = ?"
var user User
err := DB.Get(&user, sqlstr, 1)
if err != nil {
fmt.Printf("select failed, err:%v\n", err)
return
}
非常方便,连接后直接写入岛数据结构中。
代码展示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:root@tcp(127.0.0.1:3306)/test"
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, 1)
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连接数据库,取得数据非常简单。这是一个简单的示例。