Go Utils
文章平均质量分 81
Go 常用工具库。
恋喵大鲤鱼
一条不止于编码的鱼。
展开
-
Golang RSA 生成密钥、加密、解密、签名与验签
RSA 算法的安全性基于这个问题的难解性,目前还没有高效的方法可以在合理的时间内分解大整数。RSA 是最常用的非对称加密算法,由 Ron Rivest、Adi Shamir、Leonard Adleman 于1977 年在麻省理工学院工作时提出,RSA 是三者姓氏首字母的拼接。RSA 是一个非对称加密算法,虽然私钥也可以用于加密数据,但因为公钥是对外的,所以加密数据的意义不大,因为知道公钥的所有人都能解密。而私钥则用户签名,公钥用于验签。RSA 支持变长密钥非对称加密,需要加密的文件块的长度也是可变的。原创 2023-09-06 11:20:29 · 2139 阅读 · 0 评论 -
Golang 几个不错的实用函数库
大咖好呀,我是恋喵大鲤鱼。Golang 标准库是 Go 语言自带的一组核心功能库,功能全面、易于使用。在 Golang 标准库的基础上,还可以进一步封装常用的功能函数。本文将介绍一些优秀的开源实用函数库,大家可参考使用。原创 2023-09-05 15:00:42 · 1338 阅读 · 0 评论 -
Golang 将切片连接成字符串
如果想要将任意类型的切片连接成字符串,可以使用反射(reflect)包来动态处理不同类型的切片,将元素转换为字符串,并拼接成一个字符串。事实上,标准库并没有针对每种类型的切片都给出一个实现,也没有使用反射给出一个通用的实现。函数,对于其他任意类型的切片,利用 Golang 提供的反射能力,在运行时将切片元素转换为字符串并连接到一起。Join 将字符串切片的所有元素连接成一个字符串,各个元素间使用给定的字符串分隔。输出符合预期,我们通过反射,只用一个函数便可将任意类型的切片连接成字符串。原创 2023-07-21 19:31:50 · 1088 阅读 · 1 评论 -
Golang 按行读取文件的 3 种方法
Golang 是一种现代的编程语言,它具有高效、简洁和可扩展等特点,因此在各种领域广泛应用。在 Golang 中,读取文件是一个常见的操作。在本篇技术博客中,我将介绍如何在 Golang 中按行读取文件。原创 2023-04-24 11:15:13 · 6338 阅读 · 1 评论 -
Golang 1.18 泛型:零值判断
上面的实现可以满足大部业务场景下的需要,因为日常使用的切片元素均是可比较大小的(comparable),比如 booleans, numbers, strings, pointers, channels 等。从 Golang 1.18 开始支持泛型,使用泛型我想实现一个函数,其功能是清除一个切片中所有为零值元素。,那么将切片元素和类型参数的零值比较便不能满足要求,有没有其他更好的办法完成零值判断呢?注意,在删除切片零值元素时,如果切片元素是可比较的(comparable),建议使用。,因为其性能略微好于。原创 2023-04-14 16:36:59 · 1376 阅读 · 0 评论 -
Golang 分割字符串
在开发过程中,很多时候我们有分割 字符串 的需求,即把一个字符串按照某种分割符进行切割。在 Go 语言中,分割字符串我们可以分为几种情况,分别为:按空格分割、按字符分割和按字符串分割。原创 2023-03-02 15:33:44 · 9816 阅读 · 2 评论 -
Golang 泛型实现类型转换
Golang 标准库提供了很多类型转换的函数,如包可完成 string 与基本数据类型之间的转换。比如将 int 与 string 之间的互转。如果我们想完成任意类型到某一具体类型的转换,该如何实现呢?原创 2022-12-29 19:29:47 · 5551 阅读 · 11 评论 -
Golang 判断是否 zip 文件
gzip 是由 Jean-loup Gailly 和 Mark Adler 开发并于 1992 发布的一个自由软件,起初目的是用于取代 UNIX 系统上的压缩软件,并被 GNU 使用。其中 a.zip 为事先准备好的 ZIP 文件,a.txt 为文本文件,nil.txt 为空的文本文件,b.txt 不存在。于 1989 年设计,所以在文件头中我们可以看到 PK 的字样,这就是 Phil Katz 大名的首字母缩写。于 1993 年设计。ZIP 是一个历史悠久的压缩格式,也是事实上的压缩文件格式标准。原创 2022-12-16 20:30:03 · 937 阅读 · 0 评论 -
Golang 切片转集合
我们都知道 Golang 没有集合(Set)类型,为何如此设计呢?因为 Golang 是一门追求简单、现代、易于使用的语言,所以不会引入不必要的特性。Set 就是一个例子,Golang 有了 Map,当 Map 中的 value 为空结构体 struct{} 时,其不就是一个集合(Set)么,所以不用再单独引入一个 Set 类型。有了集合,在某些场景下,我们可能需要完成切片到集合类型的转换。Golang 中,利用反射,我们可以将任意类型的切片或数组转换为对应类型的集合。参考上面的函数,我们可以封装我们想要原创 2022-12-11 17:30:54 · 1008 阅读 · 0 评论 -
Golang 递归获取目录下所有文件路径
并更名 GetDirAllFilePaths 为 GetDirAllEntryPaths,GetDirAllFilePathsFollowSymlink 为 GetDirAllEntryPathsFollowSymlink,因为条目(Entry)比文件(File)语义更符合函数的功能,因为不仅可以获取文件,也可以获取目录的路径。标准库 io/ioutil 包提供了一个函数 ReadDir() 可以获取指定目录下的所有内容,按文件名排序,返回 []fs.FileInfo 切片来描述目录中的所有内容。原创 2022-11-24 18:46:59 · 5499 阅读 · 0 评论 -
Golang 统计字符串中字母数字数量
文章目录1.需求说明2.实现3.性能对比4.小结参考文献1.需求说明记录一下项目对用户 UGC 文本进行字数限制的具体实现。不同的产品,出于种种原因,一般都会对用户输入的文本内容做字数限制。出于产品定位,比如 140 字符限制的 Twitter,让内容保持简洁凝练,易于阅读;出于用户的阅读体验,过多的文字会造成阅读疲劳,合适的字数能够提高阅读舒适度;出于技术与成本的考虑,不设上限的 UGC 内容会引发一些潜在的问题,比如增加存储的成本,降低检索效率等。回到自己的项目,子一个用户发帖的业务场原创 2022-05-23 23:02:41 · 1728 阅读 · 0 评论 -
go-echarts x 轴标签显示不全
文章目录1.简介2.官方示例3.X 轴标签显示不全4.解决办法5.小结参考文献1.简介go-echarts 是 Go 中将数据绘制成各种图形图表的开源库。在 GitHub 上,它有超过 4K 颗星,使其成为 Go 中生成图表的最受欢迎的库之一。2.官方示例我想将自己的数据生成一个折线图。参考官方示例代码 go-echarts/examples,其中生成折线图的在 examples/line.go。这里以生成带有最小值,平均值与最大值的折线图为例,其官方示例代码如下。package example.原创 2022-03-09 16:11:08 · 1723 阅读 · 0 评论 -
Golang zip 压缩与解压
Go 和许多其他编程语言一样,标准库支持 zip 文件的压缩和解压。在本文中,我们将介绍如何在 Go 中利用标准库包完成 zip 文件的创建和提取。原创 2022-01-15 22:49:08 · 17335 阅读 · 9 评论 -
Go 结构体格式化输出
在软件系统中定位问题时日志不可或缺,但是当一个系统功能繁多,需要打印的日志也多如牛毛,此时为了提高我们浏览日志的效率,便于阅读的输出格式必不可少。打印结构体是打印日志时最长见的操作,但是由于结构体内容较多,都在一行时,不易于阅读,所以我们可以借助结构体默认的JSON 结构,来进行 JSON 的格式化输出。打印在一行,使用 %+v 显示结构体字段名:package mainimport ( fmt "fmt")// Student 学生信息type Student struct { Na原创 2020-07-13 15:18:57 · 18735 阅读 · 0 评论 -
Golang 任意类型切片的增删改查
slice 名为切片,是 Go 中的可变长数组,是对底层数组的封装和引用。切片指向一个底层数组,并且包含长度和容量信息。未初始化切片的值为 nil。作用于切片的内建函数主要有四个,分别是 make、len、cap 和 append。make 用于创建切片,len 用于获取切片的长度,cap 用于获取切片的容量,append 用于向切片追加元素。原创 2019-05-14 15:14:03 · 4648 阅读 · 1 评论 -
Go 映射转切片
编码中,我们可能需要将 map 的 key 或者 value 转换为 slice 进行操作。面对具体类型 map 如,我们很容易写出下面的转换函数。实现简单,满足了我们对类型为的转换。但是面对其他类型的 map,比如,,…,按照上面的思路,每一个 map 类型都要实现一个转换函数,代码非常冗余。实际上,可以借助 Go reflect 反射能力,写出一个支持泛型的转换函数。如果不关心错误可以再封装一个不返回错误的函数。注意:map 的遍历顺序是随机的,所以每次输出的结果可能不同。原创 2021-07-08 23:33:52 · 2260 阅读 · 3 评论 -
Golang 切片是否包含某元素
测试结果中,看到函数后面的 -8 个表示运行时对应的 GOMAXPROCS 的值。接着的一串很大的数字表示运行 for 循环的次数,也就是调用被测试代码的次数,最后的。以上是测试时间默认是1秒,也就是1秒的时间,如果想让测试运行的时间更长,可以通过 -lunchtime 指定,比如 5 秒。我们可以看下在元素数量为 26 的情况下,取中位元素,做个基准测试(benchmark),对比下二者的查询性能。如何判断元素是否在切片中,Golang 并没有提供直接的库函数来判断,最容易想到的实现便是通过遍历来判断。原创 2021-10-18 20:34:06 · 22654 阅读 · 6 评论 -
Golang 删除切片指定元素
文章目录参考文献删除切片指定元素,Go 标准库并未给出相应的函数,需要我们自己实现。以 []int 类型的切片为例,我们可能会直接写出下面的函数。// DeleteSliceElms 删除切片指定元素(不许改原切片)func DeleteSliceElms(sl []int, elms ...int) []int { if len(sl) == 0 || len(elms) == 0 { return sl } // 先将元素转为 set m := make(map[int]struct{原创 2021-12-15 23:34:29 · 3858 阅读 · 0 评论 -
Golang 任意类型切片互转
Golang go-huge-util 工具库介绍。原创 2020-08-06 20:30:14 · 1857 阅读 · 0 评论 -
Golang 主机字节序的判断
主机字节序由 CPU 架构决定,可能是小端,也可能是大端,常用的 Intel 与 AMD 的 CPU 均为小端字节序。字节序按类别分两种,一种是小端(Little Endian),另一种是大端(Big Endian)。(1)小端字节序,指一个单元在计算机中存放时按照低位在低地址,高位在高地址的模式存放;(2)大端字节序,指一个单元在计算机中存放时按照低位在高地址,高位在低地址的模式存放。字节序按应用场景也分两种,一是网络字节序,二是主机字节序。以上函数已放置开源功能函数库。原创 2019-06-30 13:36:35 · 2117 阅读 · 1 评论 -
Golang 函数耗时统计
计算当前时间与计算耗时放在两处,难免显得丑陋,且不易阅读。如果有多个函数需要统计耗时,那么多处书写重复的两行代码会造成代码冗余。由于 Golang 提供了函数延时执行的功能,借助 defer 我们可以通过函数封装的方式来避免代码冗余。通过输出可以看到 sum() 耗时增加了,因为增加了一次 timeCost() 函数调用。不过相比于函数封装带来的便利与代码美观,新增的耗时是微不足道的。无疑造成了代码冗余。我们在上面的基础上,进行进一步的封装,实现如下。在函数起始位置计算当前时间,在函数结束位置算出耗时。原创 2019-06-17 18:35:14 · 19394 阅读 · 11 评论 -
Golang AES 加解密
利用 Go 提供的 AES 加解密与 Base64 编解码包,我们可以轻松实现 AES 加解密。实现之前,首先了解一下 AES 的基本知识。AES(Advanced Encryption Standard)高级加密标准,是流行的对称加密算法,由美国国家标准与技术研究院(NIST)于 2001 年发布,用于取代 DES。Rijndael 算法是 AES 标准的一个实现,一般说 AES 指的就是 Rijndael 算法。电子密码本模式(ECB,Electronic Code Book);原创 2019-04-18 20:35:45 · 5940 阅读 · 1 评论