GO语言工具函数库--Lancet
支持300+常用功能的开源GO语言工具函数库–Lancet
lancet(柳叶刀)是一个全面、高效、可复用的go语言工具函数库。lancet受到了java apache common包和lodash.js的启发。
特性
- 全面、高效、可复用
- 300+常用go工具函数,支持string、slice、datetime、net、crypt…
- 只依赖go标准库
- 所有导出函数单元测试覆盖率100%
安装
1、对于使用go1.18及以上的用户,建议安装v2.x.x。因为v2.x.x用go1.18的泛型重写了大部分函数。
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
2、使用go1.18以下版本的用户,必须安装v1.x.x。目前最新的v1版本是v1.2.9。
go get github.com/duke-git/lancet@v1.2.9 // 使用go1.18以下版本, 必须安装v1.x.x版本
用法
lancet是以包的结构组织代码的,使用时需要导入相应的包名。例如:如果使用字符串相关函数,需要导入strutil包:
import "github.com/duke-git/lancet/v2/strutil"
此处以字符串工具函数ReverseStr(逆序字符串)为例,需要导入strutil包:
package mainimport ("fmt""github.com/duke-git/lancet/v2/strutil"
)func main() {s := "hello"rs := strutil.ReverseStr(s)fmt.Println(rs) //olleh
}
算法包
algorithm算法包实现一些基本算法。例如:sort、search、lrucache等。
import ( "github.com/duke-git/lancet/v2/algorithm")
示例:BubbleSort
冒泡排序,参数comparator需要实现包
lancetconstraints.Comparator
函数签名:
func BubbleSort[T any](slice []T, comparator lancetconstraints.Comparator)
Example:
package mainimport ("fmt""github.com/duke-git/lancet/v2/algorithm"
)func main() {type intComparator struct{}func (c *intComparator) Compare(v1 any, v2 any) int {val1, _ := v1.(int)val2, _ := v2.(int)//ascending orderif val1 < val2 {return -1} else if val1 > val2 {return 1}return 0}intSlice := []int{2, 1, 5, 3, 6, 4}comparator := &intComparator{}algorithm.BubbleSort(intSlice, comparator)fmt.Println(intSlice) //[]int{1, 2, 3, 4, 5, 6}
}
并发包
并发包包含一些支持并发编程的功能。例如:goroutine、channel、async等。
import "github.com/duke-git/lancet/v2/concurrency"
示例:NewChannel
返回一个 Channel 指针实例
函数签名:
type Channel struct {}
func NewChannel() *Channel
Example:
package mainimport ("fmt""github.com/duke-git/lancet/v2/concurrency"
)func main() {c := concurrency.NewChannel()
}
转换器包
convertor转换器包支持一些常见的数据类型转换。
import "github.com/duke-git/lancet/v2/convertor"
示例:ToBool
字符串转布尔类型,使用strconv.ParseBool
函数签名:
func ToBool(s string) (bool, error)
Example:
package mainimport ("fmt""github.com/duke-git/lancet/v2/convertor"
)func main() {v1, _ := convertor.ToBool("1")fmt.Println(v1) //truev2, _ := convertor.ToBool("true")fmt.Println(v2) //truev3, _ := convertor.ToBool("True")fmt.Println(v3) //truev4, _ := convertor.ToBool("123")fmt.Println(v4) //false
}
加密包
cryptor加密包支持数据加密和解密,获取md5,hash值。支持base64、md5、hmac、aes、des、rsa。
import "github.com/duke-git/lancet/v2/cryptor"
示例:AesEcbEncrypt
使用AES ECB算法模式加密数据. 参数key的长度是16, 24 or 32。
函数签名:
func AesEcbEncrypt(data, key []byte) []byte
Example:
package mainimport ("fmt""github.com/duke-git/lancet/v2/cryptor"
)func main() {data := "hello world"key := "abcdefghijklmnop"encrypted := cryptor.AesEcbEncrypt([]byte(data), []byte(key))fmt.Println(string(encrypted))
}
ps:根据需要选择性使用,不要本末倒置。更多用法去下面的开源地址或官网api中寻找。
开源协议:MIT
开源地址:https://github.com/duke-git/lancet
官网地址:https://www.golancet.cn
相关文章:
GO语言工具函数库--Lancet
支持300常用功能的开源GO语言工具函数库–Lancet lancet(柳叶刀)是一个全面、高效、可复用的go语言工具函数库。lancet受到了java apache common包和lodash.js的启发。 特性 全面、高效、可复用300常用go工具函数,支持string、slice、dateti…...
25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件
截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…...
【Docker-Dev】Mac M2 搭建docker mysql
Mac M2 搭建Mysql 1、前言2、前置说明-Docker的代理访问3、前置说明-Mysql的镜像访问3.1、提取信息3.1.1、开启Mysql的实例3.1.2、Dokcer连接Mysql3.1.3、官方简易版的docker-compose3.1.4、如何登录mysql bash3.1.5、自定义my.cnf文件3.1.6、如何知道其他自定义配置项 4、M2安…...
idea中终端Terminal页面输入命令git log后如何退出
1、idea中Terminal输入命令git log后如何退出? 2、解决 输入q键会自动退出git log命令...
程序员必备IDEA插件,什么是是IDE?
IDEA是一款功能强大的集成开发环境(IDE)插件,它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。 我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天就给大家介绍一款IDEA插件ÿ…...
SkyWalking UI 修改发布Nginx
文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…...
移动硬盘打不开怎么办?没有比这更好的办法了
移动硬盘打不开是常见故障,可能的原因有很多,例如硬盘驱动器故障、文件系统损坏、分区表错误等。本文将详细分析这些原因,并提供相应的解决方法,帮助您解决移动硬盘打不开的问题。 当移动硬盘打不开时,为了保留其中的文…...
[场景实现]:多选框与树形结构递归
一、场景描述 实现一个分配权限的页面,最左侧是大的权限模块的名称,左右侧是控制其是否勾选的多选框。中间部分是一级权限模块下的子权限名称及多选框。 请求此权限模块数据的接口返回的是树形结构 对象数组。 主要属性为menuName表示权限名࿰…...
从0到1浅析Redis服务器反弹Shell那些事
文章目录 前言Redis服务1.1 特点与应用1.2 安装与使用1.3 语法和配置1.4 未授权访问 反弹Shell2.1 Web服务写入Webshell2.2 Linux定时任务反弹shell2.3 /etc/profile.d->反弹shell2.4 写入ssh公钥登录服务器2.5 利用Redis主从复制RCE2.6 SSRF漏洞组合拳->RCE 总结 前言 …...
JavaScript中alert、confrim、prompt的使用及区别【精选】
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JavaScript中alert、confrim、prompt的区别及使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任…...
Docker Compose容器编排实战
介绍 Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用。它使用简单的 YAML 文件(通常称为 docker-compose.yml)来配置应用的服务,并使用单个命令即可创建、启动和停止整个应用。 官方文档&am…...
科技创新实验室数据管理优选:高效企业网盘推荐
科技创新实验室建设是国家加强科技创新基本能力建设的重要措施,企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案: 行业痛点1:分散的数据…...
记录一次云服务器使用docker搭建kafka的过程
创建网络 一定要将zookeeper注册中心与kafka建在一个network中,不然在springboot 集成 kakfa的demo测试代码中进行消息发送时会超时,报错: E x c e p t i o n t h r o w n w h e n s e n d i n g a m e s s a g e w i t h k e y ‘ n u l l…...
微信小程序与vue区别
微信小程序和Vue是两个完全不同的东西,虽然它们都是前端技术,但是有以下几点区别: 技术栈不同: 微信小程序使用WXML、WXSS和JavaScript进行开发,而Vue使用HTML、CSS和JavaScript进行开发。微信小程序是一种基于微信平台…...
GIT提交、回滚等基本操作记录
1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因:windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时会出现以下提示 解决:git config core.autocrlf false 2、GIT命令&…...
Apollo自动驾驶:从概念到现实的里程碑
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo Client2. Apollo Server3. Apollo Federation4. Apollo Tracing5. Apollo Codegen6. Apollo Link7. 其他工具和框架结论 🚀…...
再看promise
第一次学的时候没学牢固 后面意识到promise的重要性之后 陆陆续续的看、查,终于在今天 感觉好像明白点了 把自己敲的理解分享给大家 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&…...
Redis 分布式锁总结
在一个分布式系统中,由于涉及到多个实例同时对同一个资源加锁的问题,像传统的synchronized、ReentrantLock等单进程情况加锁的api就不再适用,需要使用分布式锁来保证多服务实例之间加锁的安全性。常见的分布式锁的实现方式有zookeeper和redis等。而由于redis分布式锁相对于比…...
Vue懒加载深度解析:提升性能、优化用户体验的完整指南
文章目录 🌳引言🌳Vue懒加载基础🌲什么是懒加载?🌲组件级懒加载🌲图片懒加载 🌳懒加载的原理与优势🌲组件懒加载原理🌲图片懒加载原理🌲懒加载的优势 &#x…...
“图解C语言:一维数组的声明、创建与初始化艺术“
各位少年: 标题:《C语言一维数组的探索之旅:从声明到初始化,及如何避免常见误区》 引言 在编程世界中,数组无疑是最基础且重要的数据结构之一,尤其在C语言中,它以其简洁明了的特性为各类数据处…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
