问题描述
在后端我们经常会在 entity 和 view 之间进行复制转换为可以发送给前端的数据
比如 time 对象在下送的时候,我们希望能显示经过格式化过的目标字符串格式,这里我们可以使用自定义的 converter,主要是定义 src 和 dst 类型,以及实现转换方法。
然后在复制的时候带上自定义 converter 即可,极大的提高了转换复制的效率。
func main() {
var (
user = User{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 200000, CreateAt: time.Now()}
//users = []User{{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 100000}, {Name: "jinzhu 2", Age: 30, Role: "Dev", Salary: 60000}}
employee = Employee{Salary: 150000}
//employees = []Employee{}
)
converter := copier.TypeConverter{
SrcType: time.Time{},
DstType: copier.String,
Fn: func(src interface{}) (dst interface{}, err error) {
srcTime, ok := src.(time.Time)
fmt.Println(srcTime)
if !ok {
return "", nil
}
return srcTime.Format(time.RFC3339), nil
}}
copier.CopyWithOption(&employee, &user, copier.Option{
Converters: []copier.TypeConverter{converter}},
)
fmt.Printf("%#v \n", employee)
}