1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-08 14:42:27 +08:00
Files
lancet/README_zh-CN.md
2022-12-31 13:35:44 +08:00

40 KiB
Raw Blame History


Go version Release GoDoc Go Report Card test codecov License

lancet柳叶刀是一个全面、高效、可复用的go语言工具函数库。 lancet受到了java apache common包和lodash.js的启发。

简体中文 | English

特性

  • 👏 全面、高效、可复用
  • 💪 300+常用 go 工具函数,支持 string、slice、datetime、net、crypt...
  • 💅 只依赖 go 标准库
  • 🌍 所有导出函数单元测试覆盖率 100%

安装

Note:

  1. 使用 go1.18 及以上版本的用户,建议安装 v2.x.x。 因为 v2.x.x 应用 go1.18 的泛型重写了大部分函数。
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
  1. 使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.3.5。
go get github.com/duke-git/lancet@v1.3.5 // 使用go1.18以下版本, 必须安装v1.x.x版本

用法

lancet 是以包的结构组织代码的,使用时需要导入相应的包名。例如:如果使用字符串相关函数,需要导入 strutil 包:

import "github.com/duke-git/lancet/v2/strutil"

例子

此处以字符串工具函数 Reverse逆序字符串为例需要导入 strutil 包:

package main

import (
    "fmt"
    "github.com/duke-git/lancet/v2/strutil"
)

func main() {
    s := "hello"
    rs := strutil.Reverse(s)
    fmt.Println(rs) //olleh
}

文档

1. algorithm 包实现一些基本查找和排序算法。

import "github.com/duke-git/lancet/v2/algorithm"

Function list:

  • BubbleSort : 使用冒泡排序算法对切片进行排序。 [doc] [play]
  • CountSort : 使用计数排序算法对切片进行排序。不改变原数据。 [doc] [play]
  • HeapSort : 使用堆排序算法对切片进行排序。 [doc] [play]
  • InsertionSort : 使用插入排序算法对切片进行排序。 [doc] [play]
  • MergeSort : 使用合并排序算法对切片进行排序。 [doc] [play]
  • QuickSort : 使用快速排序算法对切片进行排序。 [doc] [play]
  • SelectionSort : 使用选择排序算法对切片进行排序。 [doc] [play]
  • ShellSort : 使用希尔排序算法对切片进行排序。 [doc] [play]
  • BinarySearch : 返回排序切片中目标值的索引,使用二分搜索(递归调用)。 [doc] [play]
  • BinaryIterativeSearch :返回排序切片中目标值的索引,使用二分搜索(非递归)。 [doc] [play]
  • LinearSearch : 基于传入的相等函数返回切片中目标值的索引。(线性查找) [doc]
  • LRUCache : 应用 lru 算法实现内存缓存. [doc] [play]

2. concurrency 包含一些支持并发编程的功能。例如goroutine, channel, async 等。

import "github.com/duke-git/lancet/v2/concurrency"

Function list:

  • NewChannel : 返回一个 Channel 指针实例。 [doc]
  • Bridge : 将多个 channel 链接到一个 channel直到取消上下文。 [doc]
  • FanIn : 将多个 channel 合并为一个 channel直到取消上下文。 [doc]
  • Generate : 根据传入的值生成channel。 [doc]
  • Or : 将一个或多个channel读取到一个channel中当任何读取channel关闭时将结束读取。 [doc]
  • OrDone : 将一个channel读入另一个channel直到取消上下文。 [doc]
  • Repeat : 返回一个channel将参数values重复放入channel直到取消上下文。 [doc]
  • RepeatFn : 返回一个channel重复执行函数fn并将结果放入返回的channel直到取消上下文。 [doc]
  • Take : 返回一个channel其值从另一个channel获取直到取消上下文。 [doc]
  • Tee : 将一个channel分成两个channel直到取消上下文。 [doc]

3. condition 包含一些用于条件判断的函数。

import "github.com/duke-git/lancet/v2/condition"

Function list:

4. convertor 转换器包支持一些常见的数据类型转换。

import "github.com/duke-git/lancet/v2/convertor"

函数列表:

5. cryptor 加密包支持数据加密和解密,获取 md5hash 值。支持 base64, md5, hmac, aes, des, rsa。

import "github.com/duke-git/lancet/v2/cryptor"

函数列表:

6. datetime 日期时间处理包,格式化日期,比较日期。

import "github.com/duke-git/lancet/v2/datetime"

函数列表:

import list "github.com/duke-git/lancet/v2/datastructure/list"
import link "github.com/duke-git/lancet/v2/datastructure/link"
import stack "github.com/duke-git/lancet/v2/datastructure/stack"
import queue "github.com/duke-git/lancet/v2/datastructure/queue"
import set "github.com/duke-git/lancet/v2/datastructure/set"
import tree "github.com/duke-git/lancet/v2/datastructure/tree"
import heap "github.com/duke-git/lancet/v2/datastructure/heap"
import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"

Function list:

8. fileutil 包含文件基本操作。

import "github.com/duke-git/lancet/v2/fileutil"

函数列表:

9. formatter 格式化器包含一些数据格式化处理方法。

import "github.com/duke-git/lancet/v2/formatter"

函数列表:

10. function 函数包控制函数执行流程,包含部分函数式编程。

import "github.com/duke-git/lancet/v2/function"

函数列表:

11. maputil 包括一些操作 map 的函数.

import "github.com/duke-git/lancet/v2/maputil"

函数列表:

12. mathutil 包实现了一些数学计算的函数。

import "github.com/duke-git/lancet/v2/mathutil"

Function list:

13. netutil 网络包支持获取 ip 地址,发送 http 请求。

import "github.com/duke-git/lancet/v2/netutil"

函数列表:

14. random 随机数生成器包,可以生成随机[]bytes, int, string。

import "github.com/duke-git/lancet/v2/random"

函数列表:

15. retry 重试执行函数直到函数运行成功或被 context cancel。

import "github.com/duke-git/lancet/v2/retry"

函数列表:

16. slice 包含操作切片的方法集合。

import "github.com/duke-git/lancet/v2/slice"

函数列表:

17. strutil 包含字符串处理的相关函数。

import "github.com/duke-git/lancet/v2/strutil"

函数列表:

  • After : 返回源字符串中指定字符串首次出现时的位置之后的子字符串。 [doc] [play]
  • AfterLast : 返回源字符串中指定字符串最后一次出现时的位置之后的子字符串。 [doc] [play]
  • Before : 返回源字符串中指定字符串第一次出现时的位置之前的子字符串。 [doc] [play]
  • BeforeLast : 返回源字符串中指定字符串最后一次出现时的位置之前的子字符串。 [doc] [play]
  • CamelCase : 将字符串转换为 CamelCase 驼峰式字符串, 非字母和数字会被忽略。 [doc] [play]
  • Capitalize : 将字符串的第一个字符转换为大写。 [doc] [play]
  • IsString : 判断传入参数的数据类型是否为字符串。 [doc] [play]
  • KebabCase : 将字符串转换为 kebab-case 形式字符串, 非字母和数字会被忽略。 [doc] [play]
  • UpperKebabCase : 将字符串转换为大写 KEBAB-CASE 形式字符串, 非字母和数字会被忽略。 [doc] [play]
  • LowerFirst : 将字符串的第一个字符转换为小写形式。 [doc] [play]
  • UpperFirst : 将字符串的第一个字符转换为大写形式。 [doc] [play]
  • PadEnd : 如果字符串短于限制大小,则在右侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [doc] [play]
  • PadStart : 如果字符串短于限制大小,则在左侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [doc] [play]
  • Reverse : 返回字符顺序与给定字符串相反的字符串。 [doc] [play]
  • SnakeCase : 将字符串转换为 snake_case 形式, 非字母和数字会被忽略。 [doc] [play]
  • UpperSnakeCase : 将字符串转换为大写 SNAKE_CASE 形式, 非字母和数字会被忽略。 [doc] [play]
  • SplitEx : 拆分给定的字符串可以控制结果切片是否包含空字符串。 [doc] [play]
  • Substring : 根据指定的位置和长度截取子字符串。 [doc]
  • Wrap : 用给定字符包裹传入的字符串 [doc] [play]
  • Unwrap : 从另一个字符串中解开一个给定的字符串。 将更改源字符串。 [doc] [play]

18. system 包含 os, runtime, shell command 的相关函数。

import "github.com/duke-git/lancet/v2/system"

函数列表:

  • IsWindows : 检查当前操作系统是否是 windows。 [doc] [play]
  • IsLinux : 检查当前操作系统是否是 linux。 [doc] [play]
  • IsMac : 检查当前操作系统是否是 macos。 [doc] [play]
  • GetOsEnv : 根据 key 获取对应的环境变量值 [doc] [play]
  • SetOsEnv : 设置环境变量。 [doc] [play]
  • RemoveOsEnv : 删除环境变量。 [doc] [play]
  • CompareOsEnv : 换取环境变量并与传入值进行比较。 [doc] [play]
  • ExecCommand : 执行 shell 命令。 [doc] [play]
  • GetOsBits : 获取当前操作系统位数(32/64)。 [doc] [play]

19. validator 验证器包,包含常用字符串格式验证函数。

import "github.com/duke-git/lancet/v2/validator"

函数列表:

20. xerror 包实现一些错误处理函数

import "github.com/duke-git/lancet/v2/xerror"

函数列表:

如何贡献代码

非常感激任何的代码提交以使 lancet 的功能越来越强大。创建 pull request 时请遵守以下规则。

  1. Fork lancet 仓库。
  2. 创建自己的特性分支。
  3. 提交变更。
  4. Push 分支。
  5. 创建新的 pull request。