mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-23 13:52:26 +08:00
Compare commits
3 Commits
v2.1.10
...
80cbbdc787
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80cbbdc787 | ||
|
|
be148e07ba | ||
|
|
d36ab5cc3a |
@@ -21,6 +21,7 @@ import (
|
|||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
## Index
|
## Index
|
||||||
|
|
||||||
- [BubbleSort](#BubbleSort)
|
- [BubbleSort](#BubbleSort)
|
||||||
- [InsertionSort](#InsertionSort)
|
- [InsertionSort](#InsertionSort)
|
||||||
- [SelectionSort](#SelectionSort)
|
- [SelectionSort](#SelectionSort)
|
||||||
@@ -31,7 +32,6 @@ import (
|
|||||||
- [CountSort](#CountSort)
|
- [CountSort](#CountSort)
|
||||||
- [BinarySearch](#BinarySearch)
|
- [BinarySearch](#BinarySearch)
|
||||||
- [BinaryIterativeSearch](#BinaryIterativeSearch)
|
- [BinaryIterativeSearch](#BinaryIterativeSearch)
|
||||||
|
|
||||||
- [LinearSearch](#LinearSearch)
|
- [LinearSearch](#LinearSearch)
|
||||||
- [LRUCache](#LRUCache)
|
- [LRUCache](#LRUCache)
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import (
|
|||||||
- [QuickSort](#QuickSort)
|
- [QuickSort](#QuickSort)
|
||||||
- [HeapSort](#HeapSort)
|
- [HeapSort](#HeapSort)
|
||||||
- [MergeSort](#MergeSort)
|
- [MergeSort](#MergeSort)
|
||||||
|
|
||||||
- [CountSort](#CountSort)
|
- [CountSort](#CountSort)
|
||||||
- [BinarySearch](#BinarySearch)
|
- [BinarySearch](#BinarySearch)
|
||||||
- [BinaryIterativeSearch](#BinaryIterativeSearch)
|
- [BinaryIterativeSearch](#BinaryIterativeSearch)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import (
|
|||||||
- [ToBytes](#ToBytes)
|
- [ToBytes](#ToBytes)
|
||||||
- [ToChar](#ToChar)
|
- [ToChar](#ToChar)
|
||||||
- [ToChannel](#ToChannel)
|
- [ToChannel](#ToChannel)
|
||||||
|
|
||||||
- [ToFloat](#ToFloat)
|
- [ToFloat](#ToFloat)
|
||||||
- [ToInt](#ToInt)
|
- [ToInt](#ToInt)
|
||||||
- [ToJson](#ToJson)
|
- [ToJson](#ToJson)
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import (
|
|||||||
- [ToBytes](#ToBytes)
|
- [ToBytes](#ToBytes)
|
||||||
- [ToChar](#ToChar)
|
- [ToChar](#ToChar)
|
||||||
- [ToChannel](#ToChannel)
|
- [ToChannel](#ToChannel)
|
||||||
|
|
||||||
- [ToFloat](#ToFloat)
|
- [ToFloat](#ToFloat)
|
||||||
- [ToInt](#ToInt)
|
- [ToInt](#ToInt)
|
||||||
- [ToJson](#ToJson)
|
- [ToJson](#ToJson)
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ import (
|
|||||||
- [HmacSha1](#HmacSha1)
|
- [HmacSha1](#HmacSha1)
|
||||||
- [HmacSha256](#HmacSha256)
|
- [HmacSha256](#HmacSha256)
|
||||||
- [HmacSha512](#HmacSha512)
|
- [HmacSha512](#HmacSha512)
|
||||||
|
|
||||||
- [Md5String](#Md5String)
|
- [Md5String](#Md5String)
|
||||||
- [Md5File](#Md5File)
|
- [Md5File](#Md5File)
|
||||||
- [Sha1](#Sha1)
|
- [Sha1](#Sha1)
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import (
|
|||||||
- [AesOfbDecrypt](#AesOfbDecrypt)
|
- [AesOfbDecrypt](#AesOfbDecrypt)
|
||||||
- [Base64StdEncode](#Base64StdEncode)
|
- [Base64StdEncode](#Base64StdEncode)
|
||||||
- [Base64StdDecode](#Base64StdDecode)
|
- [Base64StdDecode](#Base64StdDecode)
|
||||||
|
|
||||||
- [DesEcbEncrypt](#DesEcbEncrypt)
|
- [DesEcbEncrypt](#DesEcbEncrypt)
|
||||||
- [DesEcbDecrypt](#DesEcbDecrypt)
|
- [DesEcbDecrypt](#DesEcbDecrypt)
|
||||||
- [DesCbcEncrypt](#DesCbcEncrypt)
|
- [DesCbcEncrypt](#DesCbcEncrypt)
|
||||||
@@ -43,7 +42,6 @@ import (
|
|||||||
- [DesCfbDecrypt](#DesCfbDecrypt)
|
- [DesCfbDecrypt](#DesCfbDecrypt)
|
||||||
- [DesOfbEncrypt](#DesOfbEncrypt)
|
- [DesOfbEncrypt](#DesOfbEncrypt)
|
||||||
- [DesOfbDecrypt](#DesOfbDecrypt)
|
- [DesOfbDecrypt](#DesOfbDecrypt)
|
||||||
|
|
||||||
- [HmacMd5](#HmacMd5)
|
- [HmacMd5](#HmacMd5)
|
||||||
- [HmacSha1](#HmacSha1)
|
- [HmacSha1](#HmacSha1)
|
||||||
- [HmacSha256](#HmacSha256)
|
- [HmacSha256](#HmacSha256)
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import (
|
|||||||
- [IsEmpty](#IsEmpty)
|
- [IsEmpty](#IsEmpty)
|
||||||
- [Union](#Union)
|
- [Union](#Union)
|
||||||
- [Intersection](#Intersection)
|
- [Intersection](#Intersection)
|
||||||
|
|
||||||
- [SymmetricDifference](#SymmetricDifference)
|
- [SymmetricDifference](#SymmetricDifference)
|
||||||
- [Minus](#Minus)
|
- [Minus](#Minus)
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import (
|
|||||||
- [IsEmpty](#IsEmpty)
|
- [IsEmpty](#IsEmpty)
|
||||||
- [Union](#Union)
|
- [Union](#Union)
|
||||||
- [Intersection](#Intersection)
|
- [Intersection](#Intersection)
|
||||||
|
|
||||||
- [SymmetricDifference](#SymmetricDifference)
|
- [SymmetricDifference](#SymmetricDifference)
|
||||||
- [Minus](#Minus)
|
- [Minus](#Minus)
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import (
|
|||||||
- [PreOrderTraverse](#BSTree_PreOrderTraverse)
|
- [PreOrderTraverse](#BSTree_PreOrderTraverse)
|
||||||
- [InOrderTraverse](#BSTree_InOrderTraverse)
|
- [InOrderTraverse](#BSTree_InOrderTraverse)
|
||||||
- [PostOrderTraverse](#BSTree_PostOrderTraverse)
|
- [PostOrderTraverse](#BSTree_PostOrderTraverse)
|
||||||
|
|
||||||
- [LevelOrderTraverse](#BSTree_LevelOrderTraverse)
|
- [LevelOrderTraverse](#BSTree_LevelOrderTraverse)
|
||||||
- [Depth](#BSTree_Depth)
|
- [Depth](#BSTree_Depth)
|
||||||
- [HasSubTree](#BSTree_HasSubTree)
|
- [HasSubTree](#BSTree_HasSubTree)
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import (
|
|||||||
- [PreOrderTraverse](#BSTree_PreOrderTraverse)
|
- [PreOrderTraverse](#BSTree_PreOrderTraverse)
|
||||||
- [InOrderTraverse](#BSTree_InOrderTraverse)
|
- [InOrderTraverse](#BSTree_InOrderTraverse)
|
||||||
- [PostOrderTraverse](#BSTree_PostOrderTraverse)
|
- [PostOrderTraverse](#BSTree_PostOrderTraverse)
|
||||||
|
|
||||||
- [LevelOrderTraverse](#BSTree_LevelOrderTraverse)
|
- [LevelOrderTraverse](#BSTree_LevelOrderTraverse)
|
||||||
- [Depth](#BSTree_Depth)
|
- [Depth](#BSTree_Depth)
|
||||||
- [HasSubTree](#BSTree_HasSubTree)
|
- [HasSubTree](#BSTree_HasSubTree)
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ import (
|
|||||||
- [GetNightTimestamp](#GetNightTimestamp)
|
- [GetNightTimestamp](#GetNightTimestamp)
|
||||||
- [FormatTimeToStr](#FormatTimeToStr)
|
- [FormatTimeToStr](#FormatTimeToStr)
|
||||||
- [FormatStrToTime](#FormatStrToTime)
|
- [FormatStrToTime](#FormatStrToTime)
|
||||||
|
|
||||||
- [NewUnixNow](#NewUnixNow)
|
- [NewUnixNow](#NewUnixNow)
|
||||||
- [NewUnix](#NewUnix)
|
- [NewUnix](#NewUnix)
|
||||||
- [NewFormat](#NewFormat)
|
- [NewFormat](#NewFormat)
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import (
|
|||||||
- [GetNightTimestamp](#GetNightTimestamp)
|
- [GetNightTimestamp](#GetNightTimestamp)
|
||||||
- [FormatTimeToStr](#FormatTimeToStr)
|
- [FormatTimeToStr](#FormatTimeToStr)
|
||||||
- [FormatStrToTime](#FormatStrToTime)
|
- [FormatStrToTime](#FormatStrToTime)
|
||||||
|
|
||||||
- [NewUnixNow](#NewUnixNow)
|
- [NewUnixNow](#NewUnixNow)
|
||||||
- [NewUnix](#NewUnix)
|
- [NewUnix](#NewUnix)
|
||||||
- [NewFormat](#NewFormat)
|
- [NewFormat](#NewFormat)
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import (
|
|||||||
- [IsExist](#IsExist)
|
- [IsExist](#IsExist)
|
||||||
- [IsLink](#IsLink)
|
- [IsLink](#IsLink)
|
||||||
- [IsDir](#IsDir)
|
- [IsDir](#IsDir)
|
||||||
|
|
||||||
- [ListFileNames](#ListFileNames)
|
- [ListFileNames](#ListFileNames)
|
||||||
- [RemoveFile](#RemoveFile)
|
- [RemoveFile](#RemoveFile)
|
||||||
- [ReadFileToString](#ReadFileToString)
|
- [ReadFileToString](#ReadFileToString)
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import (
|
|||||||
- [IsExist](#IsExist)
|
- [IsExist](#IsExist)
|
||||||
- [IsLink](#IsLink)
|
- [IsLink](#IsLink)
|
||||||
- [IsDir](#IsDir)
|
- [IsDir](#IsDir)
|
||||||
|
|
||||||
- [ListFileNames](#ListFileNames)
|
- [ListFileNames](#ListFileNames)
|
||||||
- [RemoveFile](#RemoveFile)
|
- [RemoveFile](#RemoveFile)
|
||||||
- [ReadFileToString](#ReadFileToString)
|
- [ReadFileToString](#ReadFileToString)
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import (
|
|||||||
- [MaxBy](#MaxBy)
|
- [MaxBy](#MaxBy)
|
||||||
- [Min](#Min)
|
- [Min](#Min)
|
||||||
- [MinBy](#MaxBy)
|
- [MinBy](#MaxBy)
|
||||||
|
|
||||||
- [Percent](#Percent)
|
- [Percent](#Percent)
|
||||||
- [RoundToFloat](#RoundToFloat)
|
- [RoundToFloat](#RoundToFloat)
|
||||||
- [RoundToString](#RoundToString)
|
- [RoundToString](#RoundToString)
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import (
|
|||||||
- [MaxBy](#MaxBy)
|
- [MaxBy](#MaxBy)
|
||||||
- [Min](#Min)
|
- [Min](#Min)
|
||||||
- [MinBy](#MaxBy)
|
- [MinBy](#MaxBy)
|
||||||
|
|
||||||
- [Percent](#Percent)
|
- [Percent](#Percent)
|
||||||
- [RoundToFloat](#RoundToFloat)
|
- [RoundToFloat](#RoundToFloat)
|
||||||
- [RoundToString](#RoundToString)
|
- [RoundToString](#RoundToString)
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import (
|
|||||||
## Index
|
## Index
|
||||||
- [ConvertMapToQueryString](#ConvertMapToQueryString)
|
- [ConvertMapToQueryString](#ConvertMapToQueryString)
|
||||||
- [EncodeUrl](#EncodeUrl)
|
- [EncodeUrl](#EncodeUrl)
|
||||||
|
|
||||||
- [GetInternalIp](#GetInternalIp)
|
- [GetInternalIp](#GetInternalIp)
|
||||||
- [GetIps](#GetIps)
|
- [GetIps](#GetIps)
|
||||||
- [GetMacAddrs](#GetMacAddrs)
|
- [GetMacAddrs](#GetMacAddrs)
|
||||||
@@ -38,7 +37,6 @@ import (
|
|||||||
- [SendRequest](#SendRequest)
|
- [SendRequest](#SendRequest)
|
||||||
- [DecodeResponse](#DecodeResponse)
|
- [DecodeResponse](#DecodeResponse)
|
||||||
- [StructToUrlValues](#StructToUrlValues)
|
- [StructToUrlValues](#StructToUrlValues)
|
||||||
|
|
||||||
- [HttpGet<sup>Deprecated</sup>](#HttpGet)
|
- [HttpGet<sup>Deprecated</sup>](#HttpGet)
|
||||||
- [HttpDelete<sup>Deprecated</sup>](#HttpDelete)
|
- [HttpDelete<sup>Deprecated</sup>](#HttpDelete)
|
||||||
- [HttpPost<sup>Deprecated</sup>](#HttpPost)
|
- [HttpPost<sup>Deprecated</sup>](#HttpPost)
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import (
|
|||||||
- [GetMacAddrs](#GetMacAddrs)
|
- [GetMacAddrs](#GetMacAddrs)
|
||||||
- [GetPublicIpInfo](#GetPublicIpInfo)
|
- [GetPublicIpInfo](#GetPublicIpInfo)
|
||||||
- [GetRequestPublicIp](#GetRequestPublicIp)
|
- [GetRequestPublicIp](#GetRequestPublicIp)
|
||||||
|
|
||||||
- [IsPublicIP](#IsPublicIP)
|
- [IsPublicIP](#IsPublicIP)
|
||||||
- [IsInternalIP](#IsInternalIP)
|
- [IsInternalIP](#IsInternalIP)
|
||||||
- [HttpRequest](#HttpRequest)
|
- [HttpRequest](#HttpRequest)
|
||||||
@@ -38,13 +37,11 @@ import (
|
|||||||
- [SendRequest](#SendRequest)
|
- [SendRequest](#SendRequest)
|
||||||
- [DecodeResponse](#DecodeResponse)
|
- [DecodeResponse](#DecodeResponse)
|
||||||
- [StructToUrlValues](#StructToUrlValues)
|
- [StructToUrlValues](#StructToUrlValues)
|
||||||
|
|
||||||
- [HttpGet<sup>Deprecated</sup>](#HttpGet)
|
- [HttpGet<sup>Deprecated</sup>](#HttpGet)
|
||||||
- [HttpDelete<sup>Deprecated</sup>](#HttpDelete)
|
- [HttpDelete<sup>Deprecated</sup>](#HttpDelete)
|
||||||
- [HttpPost<sup>Deprecated</sup>](#HttpPost)
|
- [HttpPost<sup>Deprecated</sup>](#HttpPost)
|
||||||
- [HttpPut<sup>Deprecated</sup>](#HttpPut)
|
- [HttpPut<sup>Deprecated</sup>](#HttpPut)
|
||||||
- [HttpPatch<sup>Deprecated</sup>](#HttpPatch)
|
- [HttpPatch<sup>Deprecated</sup>](#HttpPatch)
|
||||||
|
|
||||||
- [ParseHttpResponse](#ParseHttpResponse)
|
- [ParseHttpResponse](#ParseHttpResponse)
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import (
|
|||||||
- [RandInt](#RandInt)
|
- [RandInt](#RandInt)
|
||||||
- [RandString](#RandString)
|
- [RandString](#RandString)
|
||||||
- [RandUpper](#RandUpper)
|
- [RandUpper](#RandUpper)
|
||||||
|
|
||||||
- [RandLower](#RandLower)
|
- [RandLower](#RandLower)
|
||||||
- [RandNumeral](#RandNumeral)
|
- [RandNumeral](#RandNumeral)
|
||||||
- [RandNumeralOrLetter](#RandNumeralOrLetter)
|
- [RandNumeralOrLetter](#RandNumeralOrLetter)
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import (
|
|||||||
- [RandInt](#RandInt)
|
- [RandInt](#RandInt)
|
||||||
- [RandString](#RandString)
|
- [RandString](#RandString)
|
||||||
- [RandUpper](#RandUpper)
|
- [RandUpper](#RandUpper)
|
||||||
|
|
||||||
- [RandLower](#RandLower)
|
- [RandLower](#RandLower)
|
||||||
- [RandNumeral](#RandNumeral)
|
- [RandNumeral](#RandNumeral)
|
||||||
- [RandNumeralOrLetter](#RandNumeralOrLetter)
|
- [RandNumeralOrLetter](#RandNumeralOrLetter)
|
||||||
|
|||||||
@@ -172,8 +172,8 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
arr := []string{"a", "b", "c", "d", "e"}
|
arr := []string{"a", "b", "c", "d", "e"}
|
||||||
res := slice.Chunk(InterfaceSlice(arr), 3)
|
res := slice.Chunk((arr), 3)
|
||||||
fmt.Println(res) //[][]any{{"a", "b", "c"}, {"d", "e"}}
|
fmt.Println(res) //[][]string{{"a", "b", "c"}, {"d", "e"}}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import (
|
|||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
|
|
||||||
- [AppendIfAbsent](#AppendIfAbsent)
|
- [AppendIfAbsent](#AppendIfAbsent)
|
||||||
- [Contain](#Contain)
|
- [Contain](#Contain)
|
||||||
- [ContainSubSlice](#ContainSubSlice)
|
- [ContainSubSlice](#ContainSubSlice)
|
||||||
@@ -46,7 +48,6 @@ import (
|
|||||||
- [GroupBy](#GroupBy)
|
- [GroupBy](#GroupBy)
|
||||||
- [GroupWith](#GroupWith)
|
- [GroupWith](#GroupWith)
|
||||||
- [IntSlice](#IntSlice)
|
- [IntSlice](#IntSlice)
|
||||||
|
|
||||||
- [InterfaceSlice](#InterfaceSlice)
|
- [InterfaceSlice](#InterfaceSlice)
|
||||||
- [Intersection](#Intersection)
|
- [Intersection](#Intersection)
|
||||||
- [InsertAt](#InsertAt)
|
- [InsertAt](#InsertAt)
|
||||||
@@ -72,6 +73,7 @@ import (
|
|||||||
- [Without](#Without)
|
- [Without](#Without)
|
||||||
- [KeyBy](#KeyBy)
|
- [KeyBy](#KeyBy)
|
||||||
|
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
## 文档
|
## 文档
|
||||||
@@ -172,8 +174,8 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
arr := []string{"a", "b", "c", "d", "e"}
|
arr := []string{"a", "b", "c", "d", "e"}
|
||||||
res := slice.Chunk(InterfaceSlice(arr), 3)
|
res := slice.Chunk(arr, 3)
|
||||||
fmt.Println(res) //[][]any{{"a", "b", "c"}, {"d", "e"}}
|
fmt.Println(res) //[][]string{{"a", "b", "c"}, {"d", "e"}}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import (
|
|||||||
- [SnakeCase](#SnakeCase)
|
- [SnakeCase](#SnakeCase)
|
||||||
- [SplitEx](#SplitEx)
|
- [SplitEx](#SplitEx)
|
||||||
- [Wrap](#Wrap)
|
- [Wrap](#Wrap)
|
||||||
|
|
||||||
- [Unwrap](#Unwrap)
|
- [Unwrap](#Unwrap)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import (
|
|||||||
- [SnakeCase](#SnakeCase)
|
- [SnakeCase](#SnakeCase)
|
||||||
- [SplitEx](#SplitEx)
|
- [SplitEx](#SplitEx)
|
||||||
- [Wrap](#Wrap)
|
- [Wrap](#Wrap)
|
||||||
|
|
||||||
- [Unwrap](#Unwrap)
|
- [Unwrap](#Unwrap)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import (
|
|||||||
- [IsCreditCard](#IsCreditCard)
|
- [IsCreditCard](#IsCreditCard)
|
||||||
- [IsDns](#IsDns)
|
- [IsDns](#IsDns)
|
||||||
- [IsEmail](#IsEmail)
|
- [IsEmail](#IsEmail)
|
||||||
|
|
||||||
- [IsEmptyString](#IsEmptyString)
|
- [IsEmptyString](#IsEmptyString)
|
||||||
- [IsFloatStr](#IsFloatStr)
|
- [IsFloatStr](#IsFloatStr)
|
||||||
- [IsNumberStr](#IsNumberStr)
|
- [IsNumberStr](#IsNumberStr)
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import (
|
|||||||
- [IsCreditCard](#IsCreditCard)
|
- [IsCreditCard](#IsCreditCard)
|
||||||
- [IsDns](#IsDns)
|
- [IsDns](#IsDns)
|
||||||
- [IsEmail](#IsEmail)
|
- [IsEmail](#IsEmail)
|
||||||
|
|
||||||
- [IsEmptyString](#IsEmptyString)
|
- [IsEmptyString](#IsEmptyString)
|
||||||
- [IsFloatStr](#IsFloatStr)
|
- [IsFloatStr](#IsFloatStr)
|
||||||
- [IsNumberStr](#IsNumberStr)
|
- [IsNumberStr](#IsNumberStr)
|
||||||
|
|||||||
@@ -222,8 +222,6 @@ func UnZip(zipFile string, destPath string) error {
|
|||||||
defer zipReader.Close()
|
defer zipReader.Close()
|
||||||
|
|
||||||
for _, f := range zipReader.File {
|
for _, f := range zipReader.File {
|
||||||
path := filepath.Join(destPath, f.Name)
|
|
||||||
|
|
||||||
//issue#62: fix ZipSlip bug
|
//issue#62: fix ZipSlip bug
|
||||||
path, err := safeFilepathJoin(destPath, f.Name)
|
path, err := safeFilepathJoin(destPath, f.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,29 +42,18 @@ func Chunk[T any](slice []T, size int) [][]T {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
length := len(slice)
|
for _, item := range slice {
|
||||||
if size == 1 || size >= length {
|
l := len(result)
|
||||||
for _, v := range slice {
|
if l == 0 || len(result[l-1]) == size {
|
||||||
var tmp []T
|
result = append(result, []T{})
|
||||||
tmp = append(tmp, v)
|
l++
|
||||||
result = append(result, tmp)
|
|
||||||
}
|
}
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// divide slice equally
|
result[l-1] = append(result[l-1], item)
|
||||||
divideNum := length/size + 1
|
|
||||||
for i := 0; i < divideNum; i++ {
|
|
||||||
if i == divideNum-1 {
|
|
||||||
if len(slice[i*size:]) > 0 {
|
|
||||||
result = append(result, slice[i*size:])
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result = append(result, slice[i*size:(i+1)*size])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compact creates an slice with all falsey values removed. The values false, nil, 0, and "" are falsey
|
// Compact creates an slice with all falsey values removed. The values false, nil, 0, and "" are falsey
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ func TestChunk(t *testing.T) {
|
|||||||
|
|
||||||
arr := []string{"a", "b", "c", "d", "e"}
|
arr := []string{"a", "b", "c", "d", "e"}
|
||||||
|
|
||||||
|
assert.Equal([][]string{}, Chunk(arr, -1))
|
||||||
|
|
||||||
|
assert.Equal([][]string{}, Chunk(arr, 0))
|
||||||
|
|
||||||
r1 := [][]string{{"a"}, {"b"}, {"c"}, {"d"}, {"e"}}
|
r1 := [][]string{{"a"}, {"b"}, {"c"}, {"d"}, {"e"}}
|
||||||
assert.Equal(r1, Chunk(arr, 1))
|
assert.Equal(r1, Chunk(arr, 1))
|
||||||
|
|
||||||
@@ -43,8 +47,11 @@ func TestChunk(t *testing.T) {
|
|||||||
r4 := [][]string{{"a", "b", "c", "d"}, {"e"}}
|
r4 := [][]string{{"a", "b", "c", "d"}, {"e"}}
|
||||||
assert.Equal(r4, Chunk(arr, 4))
|
assert.Equal(r4, Chunk(arr, 4))
|
||||||
|
|
||||||
r5 := [][]string{{"a"}, {"b"}, {"c"}, {"d"}, {"e"}}
|
r5 := [][]string{{"a", "b", "c", "d", "e"}}
|
||||||
assert.Equal(r5, Chunk(arr, 5))
|
assert.Equal(r5, Chunk(arr, 5))
|
||||||
|
|
||||||
|
r6 := [][]string{{"a", "b", "c", "d", "e"}}
|
||||||
|
assert.Equal(r6, Chunk(arr, 6))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCompact(t *testing.T) {
|
func TestCompact(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user