Skip to content

gotidy/copy

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

About

Package for fast copying structs of different types

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors