Skip to content

zhouyu260/go-extend

 
 

Repository files navigation

go-extend

GoDoc Build Status codecov Go Report Card

go-extend 收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码。

它收集各种杂项函数,并进行归类,方便使用者查找,它可以大幅度提升开发效率和程序运行性能。它以保证性能为最大前提,提供有效的方法。 针对一些标准库中的函数或者库进行一些修改,使其性能大幅度提升,但它并不用来替换标准库函数,这些函数往往会在一些场景下有效,但有些函数可以用来替换标准库函数,它们保持一致的功能,且相当安全。

一些包或者函数使用示例及分析可以在我的 博客(https://blog.thinkeridea.com) 中找到。

安装

$ go get  github.com/thinkeridea/go-extend/...

规范:

  • 与标准库包名一致的使用 ex 前缀, 避免与标准库包冲突
  • 包目录下 doc.go 作为包说明文档

性能测试

包中一些函数会进行性能测试,包括每次修订的性能对比,它们一般位于各自包下面的 benchmark 目录下,性能测试结果可以在 benchmark.md 快速浏览。

标准库函数改进列表

用来替换标准库的函数,它们和标准库函数功能保持一致,并拥有更好的性能:

  • exstrings.Join 该方法是对标准库 strings.Join 修改,配合 unsafe 包能有效减少内存分配
  • exstrings.Repeat 该方法是对标准库 strings.Repeat 修改,对于创建大字符串能有效减少内存分配
  • exstrings.Replace 替换字符串 该方法是对标准库 strings.Replace 修改,配合 unsafe 包能有效减少内存分配

用该改善标准库的函数,它们基本和标准库功能一致,但是它们都拥有更好的性能:

标准库 bytes 的扩展包,提供一些高效的 []byte 操作方法。

标准库 strings 的扩展包,提供一些高效的 string 操作方法。

  • exstrings.UnsafeToBytes 结合 unsafe 使 string[]byte 没有成本,但是字面量字符串转换后不可修改,否则会出现严重错误
  • exstrings.Bytes 把字符串转换成 []byte 类型,和 []byte(s) 操作结果一致,但是效率更高
  • exstrings.Copy 拷贝一个字符串,在截取字符串之后,避免得到大字符串引用导致内存泄漏
  • exstrings.SubStringexutf8.RuneSubString 的别名,根据字符数量截取字符串的方法
  • exstrings.Join 该方法是对标准库 strings.Join 修改,配合 unsafe 包能有效减少内存分配
  • exstrings.JoinToBytes 它响应一个 []byte 类型,有效避免类型转换
  • exstrings.Repeat 该方法是对标准库 strings.Repeat 修改,对于创建大字符串能有效减少内存分配
  • exstrings.RepeatToBytes 它响应一个 []byte 类型,有效避免类型转换
  • exstrings.Replace 替换字符串 该方法是对标准库 strings.Replace 修改,配合 unsafe 包能有效减少内存分配
  • exstrings.ReplaceToBytes 它响应一个 []byte 类型,有效避免类型转换
  • exstrings.UnsafeReplaceToBytes 它响应一个 []byte 类型,并进行原地替换,它不能接收一个字面量字符串,否则会发生严重错误
  • exstrings.Reverse 一个高效反转字符串的方法,它支持 UFT-8 编码
  • exstrings.ReverseASCII 一个高效反转字符串的方法,它支持 ASCII 编码
  • exstrings.UnsafeReverseASCII 一个高效原地反转字符串的方法,它支持 ASCII 编码,它不能接收一个字面量字符串,否则会发生严重错误

exstrings Pad 系列

一系列快速填充字符串的方法,可以做字符串格式化对齐相关操作。

  • exstrings.Pad 使用一个字符串填充另一个字符串,它有一系列方法,支持左、右、两边填充
  • exstrings.BothPad 使用另一个字符串从两端填充字符串为指定长度, 如果补充长度是奇数,右边的字符会更多一些
  • exstrings.LeftPad 使用另一个字符串从左端填充字符串为指定长度
  • exstrings.RightPad 使用另一个字符串从右端填充字符串为指定长度

exstrings JoinInts 系列

一些列快速高效的连接数值切片。

标准库 net 的扩展包,提供一些常用的操作函数。

标准库 utf8 的扩展包,提供一些高效处理多字节字符的方法。

一个浮点数的原子包, 支持 float32float64 类型,鉴于浮点数的精度可能会有些意外,详细查看包文档或浮点数算法。

一个 buffer 的公共缓存池,有一些固定的长度可选,可以有效减少程序使用的 sync.Pool 数量, 提供多种预定义大小的缓存池。

该模块定义了一个 BufferPool 接口,所有的预分配池均返回该接口,该接口提供两个方法:

  • Get() *bytes.Buffer 获取一个 *bytes.Buffer,且该实例已经被 Reset
  • Put(*bytes.Buffer)*bytes.Buffer 放回 Pool 中
  • helper.Must 快速的构建安全的方法,出现错误会 panic, 很适合程序初始化组件使用
  • helper.PanicRecoverpanic 转成 error ,并且打印栈信息到错误输出

用于辅助拼接类 csv 格式化数据日志的组件。

用于拼接日志

  • Record.NewRecord 创建一个固定长度的日志行记录器
  • Record.NewRecordPool 创建长度固定的日志记录缓存池
  • Record.Clean 清空 Record 中的所有元素,如果使用 sync.Pool 在放回 Pool 之前应该清空 Record,避免内存泄漏
  • Record.Join 使用 sep 连接 Record, 并在末尾追加 suffix 这个类似 strings.Join 方法
  • Record.ToBytes 使用 sep 连接 Record,并在末尾添加 newline 换行符
  • Record.UnsafeToBytes 使用 sep 连接 Record,并在末尾添加 newline 换行符,会使用 unsafe 包减少内存分配
  • Record.ArrayJoin 使用 sep 连接 Record,其结果作为数组字段的值
  • Record.ArrayFieldJoin 使用 fieldSep 连接 Record,其结果作为一个数组的单元
  • Record.UnsafeArrayFieldJoin 使用 fieldSep 连接 Record,其结果作为一个数组的单元,会使用 unsafe 包减少内存分配

许可

go-extend 根据 GNU General Public License v3.0 许可证授权,有关完整许可证文本,请参阅 LICENSE

About

go语言扩展包,收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%