# copor **Repository Path**: virtual-moon/copor ## Basic Information - **Project Name**: copor - **Description**: 这是一个可以复制各种类型数据值,且对结构体的指定类型字段进行特殊处理的快捷工具 - **Primary Language**: Go - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-04-21 - **Last Updated**: 2024-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言 ## README # 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) ``` ### 参考例子 ````go 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() } ````