首页 > 其他分享 >copier:万能的对象拷贝偷懒神器

copier:万能的对象拷贝偷懒神器

时间:2024-04-07 10:44:07浏览次数:22  
标签:Salary golang Name Age copier 神器 复制 偷懒

copier:万能的对象拷贝偷懒神器

原创 golang 学习记 golang学习记 2024-04-07 10:29 四川 听全文

如果你干什么事

都专注一点

那么你就会超过80%

的人

如果你在一个点上

坚持5年

那么你进入10%

都有可能

 

我见过的最美的一天

是你穿过人群找到我

的那一天

 

golang学习记 分享golang 学习的点滴 115篇原创内容 公众号

今天推荐一个结构体之间拷贝属性的库,copier。

结构体之间复制一个结构体的属性值到另一个结构体,这类需求是很常见的。

比如你从数据库里查询出来一个用户实体类,一般来说,在一个接口里只需要其中一部分信息,然后返回这部分信息给前端。

由于前端的发现非常迅猛,出现了很多的新兴技术,从最早的web,使用到JavaScript ,再到现在的H5,小程序,包括微信小程序,抖音小程序,支付宝小程序,安卓,苹果,以及实现多平台的flutter ,Kotlin,uniapp 。

针对不同的端,也可能有不同的数据显示要求。

所以快速实现对象之间的属性复制是很重要的。

开始使用

第一步,引入copier

go get github.com/jinzhu/copier

 

你没看错,这个库又是由jinzhu 大佬开发的,真是越优秀的人越努力。

第二步,初使用

package main

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

type User struct {
Name string
Role string
Age int32

// 等会复制的时候会忽略这个属性
Salary int
}

 

目标对象

type DestUser 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.
// 如果这个字段没有被复制 会返回一个error
Age int32 `copier:"must,nopanic"`

// 配置 不复制这个属性
Salary int `copier:"-"`


}

 

开始复制

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 = DestUser{Salary: 150000}
employees = []DestUser{}
)

copier.Copy(&employee, &user)

fmt.Printf("%#v \n", employee)
// 打印结果如下
// Employee{
// Name: "Jinzhu",
// Age: 18,
// Salary:150000, // 被忽略了 还是原来的值

// }

// 把单个对象复制为一个切片,毕竟切片
// 很灵活
copier.Copy(&employees, &user)

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

// 从一个切片 到 另一个切片
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"},
// }

// map 之间的复制
// 很多时候对象的另一种表现方式就是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}
}

 

高级使用

CopyWithOption 函数可以进一步的控制复制的行为。

IgnoreEmpty :设置为true 表示复制的时候不会复制是0值的字段,从而加快复制速度

DeepCopy :设置为true 表示支持深拷贝

Converters :用来做类型转换的,比如把原对象里面的time 类型的字段转换成目标对象的字符串类型的时间格式。

以上三点中的前两点都是比较常用的,知道了这个神器,大家就不要去写一大堆Set方法啦,用一行代码能搞定的一定不要多写bug哦。

 

golang 学习记

赞赏二维码喜欢作者

golang28 copier1 自动化5 golang · 目录 上一篇golang新一代格式化工具(更强的代码洁癖),gofmt可以退休了 阅读 30 golang学习记 ​ 喜欢此内容的人还喜欢   Go 泛型改进 - 用于 Map 和 Slice 的增强     幻想发生器 不看的原因   Linux运维工程师频繁使用的10款工具     我看过的号 DevOps技术栈 不看的原因   一文掌握 Golang Empty Struct 的所有用法     我看过的号 Go Official Blog 不看的原因   发消息              

人划线

标签:Salary,golang,Name,Age,copier,神器,复制,偷懒
From: https://www.cnblogs.com/cheyunhua/p/18118588

相关文章

  • 爬虫之数据神器7---Peewee性能优化技巧指南(1)
    前言继续上一章:https://hsnd-91.blog.csdn.net/article/details/137412359        Peewee是一个流行的Python对象关系映射(ORM)库,它提供了简洁而强大的数据库操作功能。然而,在处理大型数据集或高并发情况下,Peewee的性能可能会受到影响。为了帮助开发人员充分利用Peewee......
  • ARP 攻击神器:Macof 保姆级教程
    一、介绍macof是一个用于生成伪造数据流的网络工具,常用于进行网络攻击和测试。它的主要作用是生成大量的伪造MAC地址的数据包,并将这些数据包发送到网络中,从而混淆网络设备的MAC地址表,导致网络拥堵或服务中断。以下是macof工具的一些特点和用途:伪造MAC地址:macof能......
  • 剧本杀小程序开发,门店的新神器!
    在数字化浪潮的推动下,线下娱乐形式逐渐与互联网技术融合,其中“剧本杀”作为一种新兴的角色扮演游戏,正吸引着众多年轻人的目光。随着市场需求的不断扩大,不少创业者开始思考如何将这一线下活动通过线上平台进行拓展,而小程序因其便利性和易传播的特点,成为门店数字化转型的首选......
  • 首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
    CodeGeeX是一款免费的智能编程助手。继CodeGeeX在VisualStudioCode、JetBrainsIDEs全家桶、HBuilderX、deepin-IDE等主流IDE中上线后,用户呼声最高的VisualStudio平台的适配插件产品也正式推出上线了!成为首个适配VisualStudio平台的国产智能编程助手。目前CodeGeeXv1.0.0适......
  • 30-ORM:CURD神器GORM包介绍及实战
      目前,GitHub上star数最多的是GORM,它也是当前Go项目中使用最多的ORM。 GORM基础知识介绍GORM是Go语言的ORM包,功能强大,调用方便。像腾讯、华为、阿里这样的大厂,都在使用GORM来构建企业级的应用。 功能全。使用ORM操作数据库的接口,GORM都有,可以满足我们开发中对数据库......
  • 推荐一款强大的开源自动化测试神器
    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具:selenium。结合标准的WebDriverAPI来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是......
  • 盘点AI编程效率神器合集,代码助手工具大模型、Agent智能体
    关注wx公众号:aigc247进社群加wx号:aigc365程序员是最擅长革自己命的职业,让我们借助AI的力量一起摸鱼一起卷!据说好用的AI代码助手工具、大模型、Agent智能体微软的compoliot:AI神器之微软的编码助手Copilot-CSDN博客阿里的: 通义灵码_智能编码助手_AI编程-阿里云智谱AI的C......
  • 第一集 玩转Android-Studio之认识插件-----摸鱼神器
    系列文章目录第一集玩转Android-Studio之认识插件-----摸鱼神器文章目录系列文章目录前言一、插件是什么?二、使用步骤总结前言作为新手小白,我们要正能量,摸鱼只是工作的一部分,是缓解身体机能,大脑疲劳的醒神利器,并没有任何不良引导一、插件时什么AndroidStudio的......
  • 独立开发三年,打造一款多端书签收藏同步阅读神器平台
    历程开始大家好,我是阿浩。今天,我想向大家介绍一款我独立开发并维护了近三年的实用工具——【藏趣云-书签阅读助手】。这是一款多功能的阅读辅助工具,它支持多种平台,包括网页版、PC端、浏览器插件以及安卓应用程序。目前还未能推出适用于iOS系统的版本,下面丢一张截图,有图有真相......
  • 接口文档神器apidoc
    1、apidoc介绍1、apidoc是什么?api文档生成工具:基于源代码备注创建的接口文档;2、apidoc优势是啥?超简单文档生成器:几乎支持目前主流的所有风格的注释,如可在C#、Go、python、Java、JavaScript、PHP等语言中使用。便于管理和查看:有利于代码的阅读同时,也减轻文档编写工......