copy
copy copied to clipboard
Package for fast copying structs of different types
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: "[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)
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.922s
See the documentation for more information.