Popularity
2.5
Growing
Activity
4.4
Growing
39
3
4

Description

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.

Programming language: Go
License: Apache License 2.0
Tags: Utilities     Go     Golang     Copy     Deep     Struct     Copier    

Package for fast copying structs of different types alternatives and similar packages

Based on the "Utilities" category.
Alternatively, view Package for fast copying structs of different types alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Package for fast copying structs of different types or a related project?

Add another 'Utilities' Package

README

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:   "[email protected]",
    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)

Benchmark

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


*Note that all licence references and agreements mentioned in the Package for fast copying structs of different types README section above are relevant to that project's source code only.