
go对象拷贝
go
package main
import (
"fmt"
"github.com/jinzhu/copier"
)
type User struct {
Name string
Age int
Tags []string
}
type UserDTO struct {
Name string
Age int32 // 自动类型转换
Tags []string
// 如果有额外字段,不会报错,自动忽略
Extra string
}
func main() {
// 示例1:单个对象拷贝
user := User{
Name: "Alice",
Age: 30,
Tags: []string{"go", "dev"},
}
var dto UserDTO
err := copier.Copy(&dto, &user) // 也可以传 user,不要求是指针
if err != nil {
fmt.Println("Copy failed:", err)
return
}
fmt.Printf("User -> DTO: %+v\n", dto)
// 输出: User -> DTO: {Name:Alice Age:30 Tags:[go dev] Extra:}
// 示例2:Slice 拷贝(自动遍历并转换)
users := []User{
{Name: "Bob", Age: 25, Tags: []string{"frontend"}},
{Name: "Charlie", Age: 35, Tags: []string{"backend", "rust"}},
}
var dtos []UserDTO
err = copier.Copy(&dtos, &users)
if err != nil {
fmt.Println("Copy slice failed:", err)
return
}
fmt.Printf("Users -> DTOS: %+v\n", dtos)
// 输出: Users -> DTOS: [{Name:Bob Age:25 Tags:[frontend] Extra:} {Name:Charlie Age:35 Tags:[backend rust] Extra:}]
}
结果
text
User -> DTO: {Name:Alice Age:30 Tags:[go dev] Extra:}
Users -> DTOS: [{Name:Bob Age:25 Tags:[frontend] Extra:} {Name:Charlie Age:35 Tags:[backend rust] Extra:}]