Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ulule/deepcopier
simple struct copying for golang
https://github.com/ulule/deepcopier
Last synced: about 1 month ago
JSON representation
simple struct copying for golang
- Host: GitHub
- URL: https://github.com/ulule/deepcopier
- Owner: ulule
- License: mit
- Created: 2015-07-24T18:01:01.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2020-04-30T08:31:45.000Z (about 4 years ago)
- Last Synced: 2024-01-09T16:04:31.786Z (5 months ago)
- Language: Go
- Homepage:
- Size: 85.9 KB
- Stars: 431
- Watchers: 21
- Forks: 58
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go-extra - deepcopier - 07-24T18:01:01Z|2020-04-30T08:31:45Z| (Utilities / Fail injection)
- awesome-go-cn - Deepcopier
- awesome-go-zh - Deepcopier
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-stars - ulule/deepcopier - simple struct copying for golang (Go)
- fucking-awesome-go - :octocat: Deepcopier - Simple struct copying for Go. :star: 82 :fork_and_knife: 6 (Utilities / Advanced Console UIs)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go-projects - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go - Deepcopier - | - | - | (Utilities / HTTP Clients)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go-with-framework - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go-cn - Deepcopier
- awesome-go-stars - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go. - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / <span id="高级控制台用户界面-advanced-console-uis">高级控制台用户界面 Advanced Console UIs</span>)
- awesome-go-cn - Deepcopier - 结构体拷贝 (实用工具 / 高级控制台界面)
- awesome-go-with-stars - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- repo-1316-awesome-go-cn - Deepcopier
- repo-1211-awesome-go-cn - Deepcopier
- awesome-Char - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-reader - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- Go-awesome - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go-cn - Deepcopier
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go-cn - Deepcopier
- awesome-go-handwritten - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome - deepcopier - simple struct copying for golang (Go)
- awesome-go - Deepcopier - 結構體拷貝 (實用工具 / 高級控制台界面)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go - Deepcopier - Simple struct copying for Go. - :arrow_down:13 - :star:86 (Utilities / HTTP Clients)
- awesome-go - deepcopier - simple struct copying for golang - ★ 174 (Utilities)
- awesome-go2 - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Advanced Console UIs)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / HTTP Clients)
- awesome-go-cn - Deepcopier
- awesome-go-zh - Deepcopier
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- awesome-go - Deepcopier - Simple struct copying for Go. (Utilities / Utility/Miscellaneous)
- go-awesome-cn-star - Deepcopier
README
# Deepcopier
[![Build Status](https://secure.travis-ci.org/ulule/deepcopier.svg?branch=master)](http://travis-ci.org/ulule/deepcopier)
This package is meant to make copying of structs to/from others structs a bit easier.
## Installation
```bash
go get -u github.com/ulule/deepcopier
```## Usage
```golang
// Deep copy instance1 into instance2
Copy(instance1).To(instance2)// Deep copy instance1 into instance2 and passes the following context (which
// is basically a map[string]interface{}) as first argument
// to methods of instance2 that defined the struct tag "context".
Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).To(instance2)// Deep copy instance2 into instance1
Copy(instance1).From(instance2)// Deep copy instance2 into instance1 and passes the following context (which
// is basically a map[string]interface{}) as first argument
// to methods of instance1 that defined the struct tag "context".
Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).From(instance2)
```Available options for `deepcopier` struct tag:
| Option | Description |
| --------- | -------------------------------------------------------------------- |
| `field` | Field or method name in source instance |
| `skip` | Ignores the field |
| `context` | Takes a `map[string]interface{}` as first argument (for methods) |
| `force` | Set the value of a `sql.Null*` field (instead of copying the struct) |**Options example:**
```golang
type Source struct {
Name string
SkipMe string
SQLNullStringToSQLNullString sql.NullString
SQLNullStringToString sql.NullString}
func (Source) MethodThatTakesContext(c map[string]interface{}) string {
return "whatever"
}type Destination struct {
FieldWithAnotherNameInSource string `deepcopier:"field:Name"`
SkipMe string `deepcopier:"skip"`
MethodThatTakesContext string `deepcopier:"context"`
SQLNullStringToSQLNullString sql.NullString
SQLNullStringToString string `deepcopier:"force"`
}```
Example:
```golang
package mainimport (
"fmt"
"github.com/ulule/deepcopier"
)// Model
type User struct {
// Basic string field
Name string
// Deepcopier supports https://golang.org/pkg/database/sql/driver/#Valuer
Email sql.NullString
}func (u *User) MethodThatTakesContext(ctx map[string]interface{}) string {
// do whatever you want
return "hello from this method"
}// Resource
type UserResource struct {
DisplayName string `deepcopier:"field:Name"`
SkipMe string `deepcopier:"skip"`
MethodThatTakesContext string `deepcopier:"context"`
Email string `deepcopier:"force"`}
func main() {
user := &User{
Name: "gilles",
Email: sql.NullString{
Valid: true,
String: "[email protected]",
},
}resource := &UserResource{}
deepcopier.Copy(user).To(resource)
fmt.Println(resource.DisplayName)
fmt.Println(resource.Email)
}
```Looking for more information about the usage?
We wrote [an introduction article](https://github.com/ulule/deepcopier/blob/master/examples/rest-usage/README.rst).
Have a look and feel free to give us your feedback.## Contributing
* Ping us on twitter [@oibafsellig](https://twitter.com/oibafsellig), [@thoas](https://twitter.com/thoas)
* Fork the [project](https://github.com/ulule/deepcopier)
* Help us improving and fixing [issues](https://github.com/ulule/deepcopier/issues)Don't hesitate ;)