结构体解析库
copier库
用
github.com/jinzhu/copier进行结构体之间数据拷贝
相关的包:
1
2
3
import (
"github.com/jinzhu/copier"
)
语法
1
copier.Copy(&目标, &源)
基础使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package main
import (
"fmt"
"github.com/jinzhu/copier"
)
// 复制源
type Src struct {
Name string
Role string
Age int32
EmployeCode int64 `copier:"EmployeNum"` // 指定字段名称
Salary int // 在目标结构中显式忽略
SpecialSrc int //私有属性, 无法复制
}
// 目标
type Dst struct {
Name string `copier:"must"` // 必须复制,字段未复制则panic
Age int32 `copier:"must,nopanic"` // 必须复制,字段未复制则返回一个error
Salary int `copier:"-"` // 忽略复制此字段
EmployeId int64 `copier:"EmployeNum"` // 指定字段名称
DoubleAge int32
SuperRole string
SpecialDst int
}
func main() {
var (
src = Src{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 200000, SpecialSrc: 6666}
srcs = []Src{
{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 100000},
{Name: "jinzhu 2", Age: 30, Role: "Dev", Salary: 60000}}
dst = Dst{Salary: 150000, SpecialDst: 9999}
dsts = []Dst{}
)
//复制 结构体->结构体
copier.Copy(&dst, &src)
// {Name:Jinzhu Age:18 Salary:150000 EmployeId:0 DoubleAge:0 SuperRole: SpecialDst:9999}
fmt.Printf("%+v \n", dst)
//复制 结构体->结构体数组
copier.Copy(&dsts, &src)
// [{Name:Jinzhu Age:18 Salary:0 EmployeId:0 DoubleAge:0 SuperRole: SpecialDst:0}]
fmt.Printf("%+v \n", dsts)
//复制 结构体数组->结构体数组
employees := []Dst{}
copier.Copy(&employees, &srcs)
// [{Name:Jinzhu Age:18 Salary:0 EmployeId:0 DoubleAge:0 SuperRole: SpecialDst:0} {Name:jinzhu 2 Age:30 Salary:0 EmployeId:0 DoubleAge:0 SuperRole: SpecialDst:0}]
fmt.Printf("%+v \n", employees)
}