101 lines
2.3 KiB
Markdown
101 lines
2.3 KiB
Markdown
|
# Copier
|
||
|
|
||
|
I am a copier, I copy everything from one to another
|
||
|
|
||
|
[![wercker status](https://app.wercker.com/status/9d44ad2d4e6253929c8fb71359effc0b/s/master "wercker status")](https://app.wercker.com/project/byKey/9d44ad2d4e6253929c8fb71359effc0b)
|
||
|
|
||
|
## Features
|
||
|
|
||
|
* 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
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```go
|
||
|
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"},
|
||
|
// }
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Contributing
|
||
|
|
||
|
You can help to make the project better, check out [http://gorm.io/contribute.html](http://gorm.io/contribute.html) for things you can do.
|
||
|
|
||
|
# Author
|
||
|
|
||
|
**jinzhu**
|
||
|
|
||
|
* <http://github.com/jinzhu>
|
||
|
* <wosmvp@gmail.com>
|
||
|
* <http://twitter.com/zhangjinzhu>
|
||
|
|
||
|
## License
|
||
|
|
||
|
Released under the [MIT License](https://github.com/jinzhu/copier/blob/master/License).
|