做个记录,用于结构体和结构体之间的拷贝
下载地址: https://github.com/jinzhu/copier
特性:
- Copy from field to field with same name
- Copy from method to field with same name
- Copy from field to method with same name
- Copy from slice to slice
- Copy from struct to slice
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 54 55 56 57 58 59 60 61 62 63 64 65 66 |
package main import ( "fmt" "github.com/jinzhu/copier" ) type User struct { Name string Role string Age int32 } func (user *User) DoubleAge() int32 { return 2 * user.Age } type Employee struct { Name string Age int32 DoubleAge int32 EmployeId int64 SuperRule string } func (employee *Employee) Role(role string) { employee.SuperRule = "Super " + role } func main() { var ( user = User{Name: "Jinzhu", Age: 18, Role: "Admin"} users = []User{{Name: "Jinzhu", Age: 18, Role: "Admin"}, {Name: "jinzhu 2", Age: 30, Role: "Dev"}} employee = Employee{} employees = []Employee{} ) copier.Copy(&employee, &user) fmt.Printf("%#v \n", employee) // Employee{ // Name: "Jinzhu", // Copy from field // Age: 18, // Copy from field // DoubleAge: 36, // Copy from method // EmployeeId: 0, // Ignored // SuperRule: "Super Admin", // Copy to method // } // Copy struct to slice copier.Copy(&employees, &user) fmt.Printf("%#v \n", employees) // []Employee{ // {Name: "Jinzhu", Age: 18, DoubleAge: 36, EmployeId: 0, SuperRule: "Super Admin"} // } // Copy slice to slice employees = []Employee{} copier.Copy(&employees, &users) fmt.Printf("%#v \n", employees) // []Employee{ // {Name: "Jinzhu", Age: 18, DoubleAge: 36, EmployeId: 0, SuperRule: "Super Admin"}, // {Name: "jinzhu 2", Age: 30, DoubleAge: 60, EmployeId: 0, SuperRule: "Super Dev"}, // } } |
© 著作权归作者所有
文章评论(0)