Skip to content
/ copy Public

Package for fast copying structs of different types

License

Notifications You must be signed in to change notification settings

gotidy/copy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4a79fb1 · Dec 28, 2020

History

54 Commits
Oct 13, 2020
Nov 14, 2020
Nov 15, 2020
Nov 2, 2020
Oct 13, 2020
Dec 26, 2020
Dec 22, 2020
Dec 28, 2020
Dec 27, 2020
Dec 28, 2020
Dec 27, 2020
Nov 3, 2020
Nov 3, 2020
Dec 28, 2020
Dec 28, 2020
Dec 23, 2020
Dec 28, 2020
Dec 28, 2020
Dec 28, 2020
Dec 23, 2020
Dec 26, 2020

Repository files navigation

Package for fast copying structs of different types

GoDev Go Report Card Mentioned in Awesome Go

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

Nested structures, embedded types, pointers, sql null types are supported.

Installation

go get -u github.com/gotidy/copy

Example

type Person struct {
    Name       string
    MiddleName *string
    Surname    string
}

type User struct {
    Person
    Email   string
    Age     int8
    Married bool
}

type Employee struct {
    Name       string
    MiddleName string
    Surname    string
    Email      string
    Age        int
}

src := User{
    Person: Person{
        Name:       "John",
        MiddleName: nil,
        Surname:    "Smith",
    },
    Email:   "john.smith@joy.me",
    Age:     33,
    Married: false,
}
dst := Employee{}

copiers := copy.New() // New("json")
copiers.Copy(&dst, &src)

// Or more fast use case is to create the type specific copier.

copier := copiers.Get(&Employee{}, &User{}) // Created once for a pair of types.
copier.Copy(&dst, &src)

Alternative projects

Benchmarks source code can be found here

go test -bench=. -benchmem ./...
goos: darwin
goarch: amd64
pkg: github.com/gotidy/copy-bench
BenchmarkManualCopy-12         177310519         6.92 ns/op          0 B/op        0 allocs/op
BenchmarkCopiers-12             13476417         84.1 ns/op          0 B/op        0 allocs/op
BenchmarkCopier-12              40226689         27.5 ns/op          0 B/op        0 allocs/op
BenchmarkJinzhuCopier-12          407480         2711 ns/op       2480 B/op       34 allocs/op
BenchmarkDeepcopier-12            262836         4346 ns/op       4032 B/op       73 allocs/op
PASS
ok      github.com/gotidy/copy-bench    6.922s

See the documentation for more information.

License

Apache 2.0