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.
go get -u github.com/gotidy/copytype 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)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.