MCPcopy Index your code
hub / github.com/jinzhu/copier

github.com/jinzhu/copier @v0.4.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.4.0 ↗
156 symbols 321 edges 10 files 9 documented · 6% 31 cross-repo links
README

Copier

I am a copier, I copy everything from one to another

test status

Features

  • Copy from field to field with same name
  • Copy from method to field with same name
  • Copy from field to method with same name
  • Copy from slice to slice
  • Copy from struct to slice
  • Copy from map to map
  • Enforce copying a field with a tag
  • Ignore a field with a tag
  • Deep Copy

Usage

package main

import (
    "fmt"
    "github.com/jinzhu/copier"
)

type User struct {
    Name        string
    Role        string
    Age         int32
    EmployeeCode int64 `copier:"EmployeeNum"` // specify field name

    // Explicitly ignored in the destination struct.
    Salary   int
}

func (user *User) DoubleAge() int32 {
    return 2 * user.Age
}

// Tags in the destination Struct provide instructions to copier.Copy to ignore
// or enforce copying and to panic or return an error if a field was not copied.
type Employee struct {
    // Tell copier.Copy to panic if this field is not copied.
    Name      string `copier:"must"`

    // Tell copier.Copy to return an error if this field is not copied.
    Age       int32  `copier:"must,nopanic"`

    // Tell copier.Copy to explicitly ignore copying this field.
    Salary    int    `copier:"-"`

    DoubleAge int32
    EmployeeId int64 `copier:"EmployeeNum"` // specify field name
    SuperRole string
}

func (employee *Employee) Role(role string) {
    employee.SuperRole = "Super " + role
}

func main() {
    var (
        user      = User{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 200000}
        users     = []User{{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 100000}, {Name: "jinzhu 2", Age: 30, Role: "Dev", Salary: 60000}}
        employee  = Employee{Salary: 150000}
        employees = []Employee{}
    )

    copier.Copy(&employee, &user)

    fmt.Printf("%#v \n", employee)
    // Employee{
    //    Name: "Jinzhu",           // Copy from field
    //    Age: 18,                  // Copy from field
    //    Salary:150000,            // Copying explicitly ignored
    //    DoubleAge: 36,            // Copy from method
    //    EmployeeId: 0,            // Ignored
    //    SuperRole: "Super Admin", // Copy to method
    // }

    // Copy struct to slice
    copier.Copy(&employees, &user)

    fmt.Printf("%#v \n", employees)
    // []Employee{
    //   {Name: "Jinzhu", Age: 18, Salary:0, DoubleAge: 36, EmployeeId: 0, SuperRole: "Super Admin"}
    // }

    // Copy slice to slice
    employees = []Employee{}
    copier.Copy(&employees, &users)

    fmt.Printf("%#v \n", employees)
    // []Employee{
    //   {Name: "Jinzhu", Age: 18, Salary:0, DoubleAge: 36, EmployeeId: 0, SuperRole: "Super Admin"},
    //   {Name: "jinzhu 2", Age: 30, Salary:0, DoubleAge: 60, EmployeeId: 0, SuperRole: "Super Dev"},
    // }

    // Copy map to map
    map1 := map[int]int{3: 6, 4: 8}
    map2 := map[int32]int8{}
    copier.Copy(&map2, map1)

    fmt.Printf("%#v \n", map2)
    // map[int32]int8{3:6, 4:8}
}

Copy with Option

copier.CopyWithOption(&to, &from, copier.Option{IgnoreEmpty: true, DeepCopy: true})

Contributing

You can help to make the project better, check out http://gorm.io/contribute.html for things you can do.

Author

jinzhu

License

Released under the MIT License.

Core symbols most depended-on inside this repo

Copy
called by 60
copier.go
CopyWithOption
called by 39
copier.go
indirect
called by 12
copier.go
set
called by 9
copier.go
indirectType
called by 5
copier.go
deepFields
called by 4
copier.go
copier
called by 2
copier.go
getFieldNamesMapping
called by 2
copier.go

Shape

Struct 75
Function 73
Method 6
TypeAlias 2

Languages

Go100%

Modules by API surface

copier_test.go84 symbols
copier.go26 symbols
copier_different_type_test.go12 symbols
copier_tags_test.go8 symbols
copier_issue170_test.go7 symbols
copier_issue84_test.go6 symbols
copier_converter_test.go6 symbols
copier_benchmark_test.go4 symbols
copier_field_name_mapping_test.go3 symbols

For agents

$ claude mcp add copier \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact