Lancet is a comprehensive, efficient, and reusable util function library of go. Inspired by the java apache common package and lodash.js.
Website | 简体中文
Features
- 👏 Comprehensive, efficient and reusable.
- 💪 600+ go util functions, support string, slice, datetime, net, crypt...
- 💅 Only depends on two kinds of libraries: go standard library and golang.org/x.
- 🌍 Unit test for every exported function.
Installation
Note:
- For users who use go1.18 and above, it is recommended to install lancet v2.x.x. Cause in v2.x.x all functions were rewritten with generics of go1.18.
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
- For users who use version below go1.18, you should install v1.x.x. The latest of v1.x.x is v1.4.3.
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
Usage
Lancet organizes the code into package structure, and you need to import the corresponding package name when use it. For example, if you use string-related functions,import the strutil package like below:
import "github.com/duke-git/lancet/v2/strutil"
Example
Here takes the string function Reverse (reverse order string) as an example, and the strutil package needs to be imported.
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/strutil"
)
func main() {
s := "hello"
rs := strutil.Reverse(s)
fmt.Println(rs) //olleh
}
Documentation
Index
- Algorithm
- Compare
- Concurrency
- Condition
- Convertor
- Cryptor
- Datetime
- Datastructure
- Fileutil
- Formatter
- Function
- Maputil
- Mathutil
- Netutil
- Pointer
- Random
- Retry
- Slice
- Stream
- Structs
- Strutil
- System
- Tuple
- Validator
- Xerror
1. Algorithm package implements some basic algorithm. eg. sort, search. index
import "github.com/duke-git/lancet/v2/algorithm"
Function list:
- BubbleSort : sorts slice with bubble sort algorithm, will change the original slice. [doc] [play]
- CountSort : sorts slice with bubble sort algorithm, don't change original slice. [doc] [play]
- HeapSort : sorts slice with heap sort algorithm, will change the original slice. [doc] [play]
- InsertionSort : sorts slice with insertion sort algorithm, will change the original slice. [doc] [play]
- MergeSort : sorts slice with merge sort algorithm, will change the original slice. [doc] [play]
- QuickSort : sorts slice with quick sort algorithm, will change the original slice. [doc] [play]
- SelectionSort : sorts slice with selection sort algorithm, will change the original slice. [doc] [play]
- ShellSort : sorts slice with shell sort algorithm, will change the original slice. [doc] [play]
- BinarySearch : returns the index of target within a sorted slice, use binary search (recursive call itself). [doc] [play]
- BinaryIterativeSearch : returns the index of target within a sorted slice, use binary search (no recursive). [doc] [play]
- LinearSearch : returns the index of target in slice base on equal function. [doc] [play]
- LRUCache : implements memory cache with lru algorithm. [doc] [play]
2. Compare package provides a lightweight comparison function on any type. index
import "github.com/duke-git/lancet/v2/compare"
Function list:
- Equal : Checks if two values are equal or not. (check both type and value) [doc] [play]
- EqualValue : Checks if two values are equal or not. (check value only) [doc] [play]
- LessThan : Checks if value
left
less than valueright
. [doc] [play] - GreaterThan : Checks if value
left
greater than valueright
. [doc] [play] - LessOrEqual : Checks if value
left
less than or equal than valueright
. [doc] [play] - GreaterOrEqual : Checks if value
left
less greater or equal than valueright
. [doc] [play] - InDelta : Checks if two values are equal or not within a delta. [doc]
3. Concurrency package contain some functions to support concurrent programming. eg, goroutine, channel, async. index
import "github.com/duke-git/lancet/v2/concurrency"
Function list:
- NewChannel : create a Channel pointer instance. [doc] [play]
- Bridge : link multiply channels into one channel. [doc] [play]
- FanIn : merge multiple channels into one channel. [doc] [play]
- Generate : creates a channel, then put values into the channel. [doc] [play]
- Or : read one or more channels into one channel, will close when any readin channel is closed. [doc] [play]
- OrDone : read a channel into another channel, will close until cancel context. [doc] [play]
- Repeat : create channel, put values into the channel repeatedly until cancel the context. [doc] [play]
- RepeatFn : create a channel, executes fn repeatedly, and put the result into the channel, until close context. [doc] [play]
- Take : create a channel whose values are taken from another channel with limit number. [doc] [play]
- Tee : split one chanel into two channels, until cancel the context. [doc] [play]
4. Condition package contains some functions for conditional judgment. eg. And, Or, TernaryOperator... index
import "github.com/duke-git/lancet/v2/condition"
Function list:
- Bool : returns the truthy value of anything. [doc] [play]
- And : returns true if both a and b are truthy. [doc] [play]
- Or : returns false if neither a nor b is truthy. [doc] [play]
- Xor : returns true if a or b but not both is truthy. [doc] [play]
- Nor : returns true if neither a nor b is truthy. [doc] [play]
- Xnor : returns true if both a and b or neither a nor b are truthy. [doc] [play]
- Nand : returns false if both a and b are truthy. [doc] [play]
- TernaryOperator