Golang復制版:Copier

7n5e 9年前發布 | 13K 次閱讀 Copier Google Go/Golang開發

Copier 是 Golang 的復制版,它從一個結構復制到了另一個結構。它具有以下特點:

  • 如果名字匹配,就從一個場景復制到另一個場景

  • 如果方法名和場景名匹配,就從方法復制到場景

  • 如果場景名和方法名匹配,就從場景復制到方法

  • 從片復制到片

  • 從結構復制到片

示例代碼:

import . "github.com/jinzhu/copier"
type User struct {
    Name string
    Role string
    Age  int32}
    func (user *User) DoubleAge() int32 {
        return 2 * user.Age}
        type Employee struct {
            Name
            string
    Age       int32
    DoubleAge int32
    EmployeId int64
    SuperRule string}func (employee *Employee) Role(role string) {
    employee.SuperRule = "Super " + role
}
user := User{Name: "Jinzhu", Age: 18, Role: "Admin"}
employee := Employee{}Copy(&employee, &user)
// employee => Employee{ Name: "Jinzhu",           
// Copy from field
//                       Age: 18,                  
// Copy from field
//                       DoubleAge: 36,            
// Copy from method
//                       EmployeeId: 0,            
// Just ignored
//                       SuperRule: "Super Admin", 
// Copy to method
//                      }
// Copy struct to slice
user := User{Name: "hello", Age: 18, Role: "User"}
employees := []Employee{}Copy(&employees, &user)
// employees => [{hello 18 0 36 Super User}]
// Copy slice to sliceusers := []User{{Name: "Jinzhu", Age: 18, Role: "Admin"}, {Name: "jinzhu 2", Age: 30, Role: "Dev"}}
employees := []Employee{}Copy(&employees, &users)
// employees => [{hello 18 0 36 Super User} 
{Jinzhu 18 0 36 Super Admin} {jinzhu 2 30 0 60 Super Dev}]

項目主頁:http://www.baiduhome.net/lib/view/home/1437788732506

 本文由用戶 7n5e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!