Package for fast copying structs of different types
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
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.922sSee the documentation for more information.