当前位置:首页 > 技术文章 > 正文内容

基于 Go 泛型实现的工具库推荐(go2 泛型)

zonemu2个月前 (07-10)技术文章22

大家好,又见面了,我是 GitHub 精选君!

今天要给大家推荐一个 GitHub 开源项目 samber/lo,该项目在 GitHub 有超过 9.5k Star,用一句话介绍该项目就是:“ A Lodash-style Go library based on Go 1.18+ Generics (map, filter, contains, find...)”,基于泛型实现新的基础数据结构操作,使得代码更简洁易懂。

对应的压力测试证实了,使用该项目的泛型实现是要比使用 reflect 的包实现性能要好的,同时对于使用项目中的代码来替代直接使用 for 循环的代码来说,也同样有性能上的提升,原理也很容易理解因为在执行上做了并行的优化。

我们来看一下以下的一个简单示例,计算数组中不重复出现的值:

import (
    "github.com/samber/lo"
    lop "github.com/samber/lo/parallel"
)

names := lo.Uniq[string]([]string{"Samuel", "John", "Samuel"})
// []string{"Samuel", "John"}

以上也可以直接使用 lo.Uniq([]string{...}) 的方式,因为编译器有默认的类型推导。

目前该项目对 slice、map 等实现了非常多的易用函数,对于开发者来说能够更便捷的编写代码。

不妨再多看几个例子:

1、使用 Filter 进行数组过滤

2、Reduce 操作

3、GroupBy 操作

以上代码是不是很简洁同时很容易理解?如果你使用 Go 开发,非常推荐你使用该工具库。更多项目详情请查看如下链接。

开源项目地址:https://github.com/samber/lo (文末可点击阅读原文)

开源项目作者:lo

以下是参与该项目的其他贡献人员列表:

关注我们,一起探索有意思的开源项目。

相关文章

Vue3开发极简入门(16):祖孙组件间通信之provide&inject

前文说了Vue的组件间关系,有父子、爷孙、其他关系。例如之前的Father、Son是父子关系,App与Son就是爷孙关系。而props的Son,与emits的Son,就是其他关系。前文的props是父...

快速上手React(快速上手的高级表达)

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等...

零基础开始学 Web 前端开发,有什么建议?(附视频教程)

WEB前端看似简单,其实不然,要学的知识点很多很杂,对于零基础学习前端的小伙伴来说,一份详细的前端学习知识点大纲尤为重要。下面,话不多说,直接上干货(全网最全,没有之一)。PS:文末有福利(全阶段视频...

迁移GIT仓库并带有历史提交记录(git 迁移仓库)

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。//...

Jenkins 学习笔记(jenkins要学多久)

本学习笔记参考《Jenkins 2.x实践指南》。1. Jenkins 简介#Jenkins 是一款自动化的任务执行工具。通常用于持续集成/持续交付领域。可以通过界面或Jenkinsfile告诉Jen...

详解HTML5培训课程行业标准(html5课程总结)

需要HTML5培训必须先了解HTML5前景,没前景的职业,我们绝对不去入坑,这是正常人的思维。因此学习HTML5还的要多了解一些,目前HTML5技术已经日趋成熟,从国内热潮来看很多企业已开始使用,所以...