func main() {
var (
err error
f Foo
r Foo
)
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1)/demo?timeout=10s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8mb4,utf8")
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatalln("ping db fail:", err)
}
// 插入数据库
t1 := MyTime(time.Now().Unix())
f = Foo{CreateTime: t1}
_, err = db.Exec("insert into t_table (create_time) values (?)", f.CreateTime)
if err != nil {
log.Fatal(err)
}
fmt.Printf("insert create time: %d\n", int64(t1))
// 查询数据库
err = db.QueryRow("select id, create_time from t_table order by id desc limit 1").Scan(&r.ID, &r.CreateTime)
if err != nil {
log.Fatal(err)
return
}
fmt.Printf("query create time %d\n", int64(r.CreateTime))
schme
database/sql的valuer和scanner
golang类型
转化为数据库类型对应的golang原类型
数据库类型对应的golang原类型
转化为golang类型
示例
import ( "database/sql" "database/sql/driver" "fmt" "log" "time"
)
// LAYOUT 日期格式 var LAYOUT = "2006-01-02 15:04:05"
// Foo 表结构对应结构体 type Foo struct { ID int
gorm:"column:id"
CreateTime MyTimegorm:"column:create_time"
}// MyTime 自定义日期类型存时间戳 type MyTime int64
// Scan 数据库类型装换为MyTime类型 func (t MyTime) Scan(src interface{}) error { switch src.(type) { // 将字符串byte装换为MyTime类型 case []byte: tm, err := time.ParseInLocation(LAYOUT, string(src.([]byte)), time.Local) t = MyTime(tm.Unix()) return err } return nil }
// Value MyTime转换为数据库类型 func (t MyTime) Value() (driver.Value, error) { // 将MyTime类型转换为layout 格式的字符串byte return []byte(time.Unix(int64(t), 0).Format(LAYOUT)), nil }
func main() { var ( err error f Foo r Foo ) db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1)/demo?timeout=10s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8mb4,utf8") if err != nil { panic(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatalln("ping db fail:", err) } // 插入数据库 t1 := MyTime(time.Now().Unix()) f = Foo{CreateTime: t1} _, err = db.Exec("insert into t_table (create_time) values (?)", f.CreateTime) if err != nil { log.Fatal(err) } fmt.Printf("insert create time: %d\n", int64(t1))
}
encoding/json 的MarshalJSON和UnmarshalJSON
示例
输出打印