copor
介绍
这是一个可以复制各种类型数据值,且对结构体的指定类型字段进行特殊处理的快捷工具
初始化
默认初始化
由于目前只有一个日期转字符串,默认已做了初始化,若使用默认格式则无需再次初始化
func init() {
// 当前只有一个特殊处理,默认添加,后期特殊处理增多后,再去除
AddSpecial(SpecialTimeToStr)
}
自定义初始化
可自定义转换格式值
copor.AddSpecial(copor.SpecialTimeToStr, func(value interface{}) interface{} {
return value.(time.Time).Format("2006-01/02")
})
取消特殊转换
copor.StopSpecial(copor.SpecialTimeToStr)
参考例子
package main
import (
"database/sql"
"fmt"
"time"
"gitee.com/Virtual-Moon/copor"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
ConnectAt sql.NullTime `json:"connect_at"`
LoginOutAt sql.NullTime `json:"login_out_at"`
}
type UserInfo struct {
Id int64 `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
ConnectAt string `json:"connect_at"`
LoginOutAt string `json:"login_out_at"`
}
func TestDefault() {
fmt.Println("测试无特殊转换")
copor.StopSpecial(copor.SpecialTimeToStr)
u := User{
Id: 1,
Name: "张三",
CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
UpdatedAt: time.Now(),
ConnectAt: sql.NullTime{
Time: time.Now(),
Valid: true,
},
LoginOutAt: sql.NullTime{
Time: time.Time{},
Valid: false,
},
}
fmt.Println("原数据:", u)
info := UserInfo{}
copor.Copy(&info, u)
fmt.Println("新数据:", info)
}
func TestDefaultChange() {
fmt.Println("测试使用默认特殊转换")
//copor.AddSpecial(copor.SpecialTimeToStr)
u := User{
Id: 1,
Name: "张三",
CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
UpdatedAt: time.Now(),
ConnectAt: sql.NullTime{
Time: time.Now(),
Valid: true,
},
LoginOutAt: sql.NullTime{
Time: time.Time{},
Valid: false,
},
}
fmt.Println("原数据:", u)
info := UserInfo{}
copor.Copy(&info, u)
fmt.Println("新数据:", info)
}
func TestCustomChange() {
fmt.Println("测试使用自定义特殊转换")
copor.AddSpecial(copor.SpecialTimeToStr, func(value interface{}) interface{} {
v, ok := value.(time.Time)
if ok {
return v.Format("2006-01-02")
}
v2, ok2 := value.(sql.NullTime)
if ok2 {
if v2.Valid {
return v2.Time.Format("2006/01/02")
} else {
return ""
}
}
return ""
})
u := User{
Id: 1,
Name: "张三",
CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
UpdatedAt: time.Now(),
ConnectAt: sql.NullTime{
Time: time.Now(),
Valid: true,
},
LoginOutAt: sql.NullTime{
Time: time.Time{},
Valid: false,
},
}
fmt.Println("原数据:", u)
info := UserInfo{}
copor.Copy(&info, u)
fmt.Println("新数据:", info)
}
func main() {
TestDefaultChange()
TestDefault()
TestCustomChange()
}