Skip to content

jmptrader/deepcopier

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deepcopier

Build Status

This package is meant to make copying of structs to/from others structs a bit easier.

Installation

$ go get github.com/ulule/deepcopier

This package requires some dependencies:

All dependencies will be installed for you.

Basic usage

// 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)

You should use the following struct tags:

  • field: name of the field in the target instance
  • context: method will take context (map[string]interface{}) as first argument
  • skip: skip this field (do not process anything)

Example:

package main

import (
    "fmt"
    "github.com/ulule/deepcopier"
)

// Model
type User struct {
    Name string
}

func (u *User) MethodThatTakesContext(ctx map[string]interface{}) string {
    // do whatever you want
    return ""
}

// Resource
type UserResource struct {
    DisplayName            string `deepcopier:"field:Name"`
    SkipMe                 string `deepcopier:"skip"`
    MethodThatTakesContext string `deepcopier:"context"`
}

func main() {
    user := &User{
        Name: "gilles",
    }

    resource := &UserResource{}

    deepcopier.Copy(user).To(resource)

    fmt.Println(resource.DisplayName)
}

Looking for more information about the usage?

We wrote an introduction article, have a look and give us your feedback.

Contributing

Don't hesitate ;)

About

simple struct copying for golang

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 99.7%
  • Makefile 0.3%