go-extend

module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 6, 2020 License: GPL-3.0

README

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 包能有效减少内存分配

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

API 列表

exbytes

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

exstrings

标准库 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 系列

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

exnet

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

exutf8

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

exatomic

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

pool

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

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

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

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

datalog.Record

用于拼接日志

  • 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

Directories

Path Synopsis
Package datalog 用于辅助拼接类 csv 格式化数据日志的组件。
Package datalog 用于辅助拼接类 csv 格式化数据日志的组件。
Package exatomic 实现了 float32 与 float64 原子操作, 我在历史项目中实时在线统计一些价格,在多线程时往往非常有用, 简化程序逻辑,并提升程序性能。
Package exatomic 实现了 float32 与 float64 原子操作, 我在历史项目中实时在线统计一些价格,在多线程时往往非常有用, 简化程序逻辑,并提升程序性能。
Package exbytes 收集常规的 []byte 操作,作为 go 标准库 bytes 的扩展。
Package exbytes 收集常规的 []byte 操作,作为 go 标准库 bytes 的扩展。
Package exnet 收集一些网络模块函数
Package exnet 收集一些网络模块函数
exhttp/expprof
Package expprof 这是从 net/http/pprof 包复制过来的,做了一些调整 我希望核心的逻辑不变,保持和标准库一致的功能,会调整使用的接口,使之易于控制。
Package expprof 这是从 net/http/pprof 包复制过来的,做了一些调整 我希望核心的逻辑不变,保持和标准库一致的功能,会调整使用的接口,使之易于控制。
Package exstrings 收集常规的 string 操作,作为 go 标准库 strings 的扩展。
Package exstrings 收集常规的 string 操作,作为 go 标准库 strings 的扩展。
exunicode
exutf8
Package exutf8 用于改善标准库 utf8 包,提升操作多字节字符的性能及便利性,避免转换 []rune 类型。
Package exutf8 用于改善标准库 utf8 包,提升操作多字节字符的性能及便利性,避免转换 []rune 类型。
Package helper 收集一些可以辅助我们快速编程的方法,让我们极快的编写出自己的应用程序。
Package helper 收集一些可以辅助我们快速编程的方法,让我们极快的编写出自己的应用程序。
Package pool 创建一些常用的 pool, 底层依托 sync.pool 在项目开发中会大量使用 sync.Pool, 有很多 pool 是可以共享的,最常见的就是 bytes.Buffer。
Package pool 创建一些常用的 pool, 底层依托 sync.pool 在项目开发中会大量使用 sync.Pool, 有很多 pool 是可以共享的,最常见的就是 bytes.Buffer。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL