近日,Go 核心开发团队终于宣布了 Go 1.18 正式版本的发布!这是一个大家期待很久的版本!Go 1.18 包含大量新功能:模糊测试、性能改进、工作区等,以及 Go 语言开源以来最大的一次语法特性变更 —— 支持泛型!

支持泛型后,我们便不再需要写如下冗余的代码:

image.png

现在只需要简单的一行即可:

func Min[T constraints.Ordered](a, b T) T { if a < b { return a }; return b}

lodash

在 JavaScript 的世界里,lodash.js 是一个一致性、模块化、高性能的 JavaScript 实用工具库,其通过降低 array、number、objects、string 等等的使用难度让 JavaScript 变得更简单。并且其不需要引入其他第三方依赖。

我们可以直接调用其中封装好的方法,比如数组去重,防抖函数等等,简化很多代码。

比如去重:

import _ from 'lodash'
_.uniq([2, 1, 2]);
// => [2, 1]

比如过滤掉数组中不符合规则的元素:

var users = [{ 'user': 'barney', 'age': 36, 'active': true },{ 'user': 'fred',   'age': 40, 'active': false }
];_.filter(users, function(o) { return !o.active; });
// => objects for ['fred']// The `_.matches` iteratee shorthand.
_.filter(users, { 'age': 36, 'active': true });
// => objects for ['barney']

somber/lo

在 Golang 支持泛型之前,实现像 lodash.js 这样一套适配多种数据类型的完整的工具库是非常不容易的。有一些开源库通过其他方式实现了部分功能,大致有三种方案:

  • 纯手撸 - 毫无疑问,这种方式是最不优雅的,需要对每种类型进行开发,需要做很多无聊的工作。

  • 代码生成 - 通过脚本辅助生成针对不同类型的工具函数,比如 go-dash/slice。

  • 使用反射 - 这种方式可以实现目的,但是反射会带来较大复杂度和造成运行时性能的下降。go-funk 和robpike/filter都是通过该种方式实现的工具库。

somber/lo 是一个基于 Golang 泛型实现的的 lodash 风格工具库,比较好的避免了上面的问题。

somber/lo 包含了非常多的方法,主要可以划分为以下几类:

  • slice 辅助方法

  • map 辅助方法

  • tuples 辅助方法

  • 多个集合之间计算辅助方法

  • 搜索查询辅助方法

  • 其他函数式编程辅助方法等

以切片去重举例:

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

调用非常简单,并且在大多数情况下,我们可以省略类型的指定:

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

再比如过滤掉切片中不符合规则的元素:

even := lo.Filter([]int{1, 2, 3, 4}, func(x int, _ int) bool {return x%2 == 0
})
// []int{2, 4}

Summary

somber/lo 基于泛型包装了非常多的工具方法,可以大大节省我们的开发时间,避免重复开发,提升效率。但是该库开源至今才两周,可能会有一些问题缺陷存在其中,线上使用还需要谨慎一些。

Reference

Go 1.18 is released! - The Go Programming Language

The benefits of using Lodash in the Go language without reflection (freecodecamp.org)

samber/lo:

「GoCN酷Go推荐」基于泛型的 Golang lodash 库 — samber/lo相关推荐

  1. 「GoCN酷Go推荐」后现代时代远程办公网络问题的golang开源解决方案 —— PairMesh...

    PairMesh是什么? Pairmesh是一款先进的虚拟局域网(VPN)工具,用来搭建与访问安全,易用,高性能的点对点的软件定义虚拟局域网,为远程办公的网络连接问题提供了开箱即用的解决方案. 拥抱开 ...

  2. 「GoCN酷Go推荐」漏桶限流库 — uber-go/ratelimit

    上次有同学分享了 单机限流器 time/rate 库,讲了 Golang 标准库中基于令牌桶实现限流组件的 time/rate 使用,同时也讲了一些限流算法原理. 这里分享一个 uber 开源的一套基 ...

  3. 「GoCN酷Go推荐」Go 语言高性能图像处理神器 h2non/bimg

    0 推荐背景 日常业务开发中常会遇到各种图像处理需求,如,图片大小调整.翻转.旋转.提取大小.加水印.图片模糊化,格式转换,修剪等等:图像处理根据业务需求一部分图像处理需求在前端完成,如,用户裁剪编辑 ...

  4. 「GoCN酷Go推荐」使用 cmux 实现服务端连接多路复用

    如果一个应用需要同时对外提供 HTTP 和 gRPC 服务,通常情况下我们会为两个服务绑定不同的监听端口,而本文要介绍的 cmux 为我们提供了一种连接多路复用的新选择,使用 cmux 可以将不同服务 ...

  5. 「GoCN酷Go推荐」​QQ机器人 go-cqhttp

    什么是 go-cqhttp?✦ QQ机器人,可以做的事儿太多了,比如一个UP主需要群发多个QQ群,以便通知粉丝们开播:再比如可以检测群内或发给自己的消息,而通过代码直接回复做的简单回复.比如检测群内有 ...

  6. 「GoCN酷Go推荐」go语言位操作库 — bitset

    bitset库实现了bitsets数据结构,这是一种正整数和布尔值映射关系的结构,它比map[uint]bool更高效 什么是bitsets✦ bitsets基本思想是用一个bit位来标记某个元素对应 ...

  7. 「GoCN酷Go推荐」高性能内存缓存 ristretto

    背景 ristretto 是 dgraph 团队开源的一款高性能内存缓存库,旨在解决高并发场景下的缓存性能和吞吐瓶颈.dgraph 专攻的方向是高性能图数据库,ristretto 就是其图数据库和 K ...

  8. 「GoCN酷Go推荐」快速搭建私有云服务 go-btfs

    # 1. go-btfs 是什么?# go-btfs 是一个去中心化的文件存储平台,无论图片.文件.视频等等各类文件.每个人都可以在自己电脑上安装部署 BTFS 节点,然后大家的节点相互连接,构成一个 ...

  9. 「GoCN酷Go推荐」JSON 数据获取器 JID

    01 推荐理由   JSON 格式数据适用范围非常广泛,一个内容丰富的json数据可能很大,使用 JID 可以让你非常舒服的获取到想要到数据. 02 简介 JID 是一个过滤JSON格式数据 cli ...

最新文章

  1. python 字符串 转 dict
  2. 使用MyEclipse2017进行web开发
  3. 路飞学院-Python爬虫实战密训班-第2章
  4. word2016配置Mathtype
  5. Linq 异常“此提供程序只支持对返回实体或投影(包含所有标识列)的有序查询使用 Skip()...”...
  6. android 数据库 字节数组,Android上的GreenDAO:字节数组作为主键/构建包含字节数组属性Where子句的查询...
  7. 【摘录】BREW应用的c++实现注意点
  8. python os.walk模块_Python之os.walk和os.path.walk
  9. 转:运维监控系统-监控项及指标的梳理
  10. GoldenGate 12.3微服务架构与传统架构的区别
  11. STM32 4*4矩阵按键
  12. spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍
  13. LinkedList和ArrayList异同
  14. Linux开发:error: ‘clockid_t’ has not been declared
  15. 数据结构 经典面试题 用两个队列实现一个栈
  16. html input 密文,HTML input text框显示为密文
  17. JPEG图片存储格式及原理
  18. 如何快速搭建个人网站
  19. Collected errors: * check_data_file_clashes: Package libustream-openssl wants to install file /home/
  20. 健康计划 用户输入身高(m),体重(kg) 计算公式:BMI = 体重 / 身高^2 BMI < 18.5:过轻 18.5≤ BMI <24:正常 24 ≤ BMI <27:过重 27

热门文章

  1. Redshift 简介
  2. keras里的convLSTM实现
  3. Spring系列之Spring常用注解总结 原文:https://www.cnblogs.com/xiaoxi/p/5935009.html
  4. fortify——password Management
  5. 白酒企业数字化转型怎么做?酒类招商加盟营销系统功能有哪些?
  6. 探索“迅游加速器(LSP)”DLL的大致原理
  7. Linux Centos 图形界面设置为中文
  8. 多元文化研究---新加坡李光耀
  9. 2020年合肥市青少年信息学科普日活动小学组试题
  10. e.printStackTrace();什么意思?