utils

package module
v1.22.10 Latest Latest
Warning

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

Go to latest
Published: Jun 25, 2024 License: Apache-2.0 Imports: 46 Imported by: 0

README

go-utils

介绍

golang 帮助函数

安装教程
  1. github安装 go get -u github.com/Is999/go-utils

  2. gitee安装 go get -u gitee.com/Is999/go-utils

使用说明
  1. utils包中代码仅供参考,造成损失概不负责。
  2. 版本要求golang 1.22
历史变更
  1. 版本要求golang 1.18变更为1.22
  2. 移除了1.21 版本前的Max、Min 两个函数,推荐使用golang 内置函数 max、min
  3. 移除了1.21 版本前的Logger 文件,使用标准库中 log/slog
  4. Curl 和 Response 记录日志方式使用了标准库 log/slog记录日志
  5. 根据1.21版本 log/slog 增加了errors文件,实现了LogValuer 接口,对error的日志追踪
  6. utils中返回的error 统一使用了WrapError, 支持error记录追踪
  7. RSA加密解密增加了对长文本的支持,增加了对PEM key 去除头尾标记和还原头尾标记方法
  8. mathd/rand 改1.22版本 mathd/rand/v2, 部分函数形参 rand.Source 改为*rand.Rand

Go常用标准库方法及utils包帮助函数

开发中使用频率较高的Go标准库中的方法及utils包中的帮助方法。ustils包中的方法都可以在单元测试中找到使用方法示例。版本要求 >= 1.22版本。

注意:utils包中代码仅供参考,不建议用于商业生产,造成损失概不负责。

1. 字符串

stringsbytes 两个包对字符串的操作基本相同拥有相同的方法名称和参数,只是参数类型的不同。


1.1 截取字符串

推荐:包含中文(宽字符)时,使用 string转rune切片截取字符串。


type string
string[start: end]
参数 描述
string 原字符串。
start 表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取。
end 表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度。

func utils.Substr
func Substr(str string, start, length int) string
参数 描述
str 原字符串。
start 截取的起始位置,即截取的第一个字符所在的索引:
start小于0时,start = len(str) + start
length 截取的截止位置,即截取的最后一个字符所在的索引:
length大于0时,length表示为截取子字符串的长度,截取的最后一个字符所在的索引,值为:start + length
length小于0时,length表示为截取的最后一个字符所在的索引,值为:len(str) + length + 1 。例如:等于 -1 时,表示截取到最后一个字符;等于 -2 时,表示截取到倒数第二个字符。

备注:Substr 内部实现string转rune切片。

// string转rune切片
runes := []rune(str)
string(runes[start: end])

1.2 拼接字符串

推荐:strings.Builder+预设大小的方式拼接字符串。


struct strings.Builder
var b strings.Builder
b.Grow(lenth)     // 预设大小
b.WriteString(s1) // 写入字符串s1
b.WriteString(s2) // 写入字符串s2
s3 := b.String() // 拼接后的字符串

func fmt.Sprintf
var str = fmt.Sprintf("%s%d%s", s1, i, s2)

func strings.Join
var str []string = []string{s1, s2}
s := strings.Join(str, "")

struct bytes.Buffer
var bt bytes.Buffer
bt.WriteString(s1)
bt.WriteString(s2)
s3 := bt.String()

1.3 获取字符串长度

推荐:包含宽字符(宽字符算一个长度)时,使用utf8.RuneCount、 utf8.RuneCountInString获取长度。


func len
len(str)

func utf8.RuneCount
func RuneCount(p []byte) int

func utf8.RuneCountInString
func RuneCountInString(s string) (n int)

func bytes.Count
func Count(s, sep []byte) int
参数 描述
str 要获取长度的字符串。
sep 分隔符,一般传 nil。

备注:利用 sep 长度等于0的逻辑获取字符串长度;sep长度等于0内部调用 utf8.RuneCount(s) + 1,所以返回的长度需要减 1

lenth := bytes.Count([]byte(str), nil)) - 1

func strings.Count
func Count(s, substr string) int
参数 描述
str 要获取长度的字符串。
substr 子串,传入空即可。

备注:利用 substr 长度等于0的逻辑获取字符串长度;substr长度等于0内部调用 utf8.RuneCountInString(s) + 1,所以返回的长度需要减 1

lenth := strings.Count(str, "") - 1

1.4 分割字符串

分割字符串我们可以分为几种情况,分别为:按空格分割、按子字符串分割和按字符分割。


func strings.Fields
func Fields(s string) []string

备注:按空格分割字符串


func strings.FieldsFunc
func FieldsFunc(s string, f func (rune) bool) []string 

备注:按字符分割字符串


func strings.Split
func Split(s, sep string) []string
参数 描述
s 要分割的字符串。
sep 字符串的分割符。

备注:按子字符串分割字符串

// 按空格(空字符串)分割
strings.Split(s, " ")
// 按xxx字符串分割
strings.Split(s, "xxx")

1.5 统计子串在字符串中出现的次数

func strings.Count
func Count(s, substr string) int
参数 描述
s 原字符串。
substr 要检索的字符串。

1.6 查找子串在字符串中出现位置

func strings.Index
func Index(s, substr string) int
参数 描述
s 原字符串。
substr 要检索的字符串。

备注:返回的是字符串第一次出现的位置。查找不存在的字符串返回 -1


func stringsLastIndex
func LastIndex(s, substr string) int
参数 描述
s 原字符串。
substr 要检索的字符串。

备注:返回的是字符串最后一次出现的位置。查找不存在的字符串返回 -1


func strings.IndexAny
func IndexAny(s, chars string) int
参数 描述
s 原字符串。
chars 要检索的字符序列。

备注:返回第一次出现字符序列的索引;反之,则返回 -1


func strings.LastIndexAny
func LastIndexAny(s, chars string) int
参数 描述
s 原字符串。
chars 要检索的字符序列。

备注:返回最后一次出现字符序列的索引;反之,则返回 -1


func strings.IndexByte
func IndexByte(s string, c byte) int
参数 描述
s 原字符串。
c 表示要检索的字符。

备注:返回第一次出现字符的索引;反之,则返回 -1


func strings.LastIndexByte
func LastIndexByte(s string, c byte) int
参数 描述
s 原字符串。
r 表示要检索的字符。

备注:返回最后一次出现字符的索引;反之,则返回 -1


func strings.IndexRune
func IndexRune(s string, r rune) int
参数 描述
s 原字符串。
r 表示要检索的字符。

备注:返回第一次出现字符的索引;反之,则返回 -1


func strings.LastIndexRune
func LastIndexRune(s string, r rune) int
参数 描述
s 原字符串。
c 表示要检索的字符。

备注:返回最后一次出现字符的索引;反之,则返回 -1


func strings.IndexFunc
func IndexFunc(s string, f func (rune) bool) int
参数 描述
s 原字符串。
f 表示要检索的字符的条件判断函数。

备注:返回第一次出现字符的索引;反之,则返回 -1


func strings.LastIndexFunc
func LastIndexFunc(s string, f func (rune) bool) int
参数 描述
s 原字符串。
f 表示要检索的字符的条件判断函数。

备注:返回最后一次出现字符的索引;反之,则返回 -1


1.7 判断字符串是否包含子串

func strings.HasPrefix
func HasPrefix(s, prefix string) bool
参数 描述
s 原字符串。
prefix 要检索的子串。

备注:检索字符串s是否以指定字符串prefix开头,如果是返回 True;反之返回 False


func strings.HasSuffix
func HasSuffix(s, suffix string) bool
参数 描述
s 原字符串。
suffix 要检索的子串。

备注:检索字符串s是否以指定字符串suffix结尾,如果是返回 True;反之返回 False


func strings.Contains
func Contains(s, substr string) bool
参数 描述
s 原字符串。
substr 要检索的子串。

备注:检索字符串s是否包含字符串substr。函数内部实现 strings.Index >= 0


func strings.ContainsRune
func ContainsRune(s string, r rune) bool
参数 描述
s 原字符串。
r 表示要检索的字符。

备注:检索字符串s是否包含字符r。函数内部实现 strings.IndexRune >= 0


func strings.ContainsAny
func ContainsAny(s, chars string) bool
参数 描述
s 原字符串。
chars 表示要检索的字符串。

备注:检索字符串s是否包含字符串chars。函数内部实现 strings.IndexAny >= 0


func strings.Cut
func Cut(s, sep string) (before, after string, found bool)
参数 描述
s 原字符串。
sep 查找的字符串。

备注:在字符串s中找到字符串sep, 并返回字符串sep前后部分以及是否找到字符串sep


1.8 字符串大小写转换

func strings.ToTitle
func ToTitle(s string) string 

备注:将字符串首字母转成大写


func strings.ToLower
func ToLower(s string) string

备注:将字符串转成小写


func strings.ToUpper
func ToUpper(s string) string

备注:将字符串转成大写


1.9 去除字符串指定字符

func strings.TrimSpace
func TrimSpace(s string) string

备注:将字符串左右两边的空格去除


func strings.Trim
func Trim(s string, cutset string) string
参数 描述
s 原字符串。
cutset 需要去除的字符串。

备注:将字符串左右两边的指定字符串 cutset 去除


func strings.TrimLeft
func TrimLeft(s, cutset string) string
参数 描述
s 原字符串。
cutset 需要去除的字符串。

备注:将字符串左边的指定字符串 cutset 去除


func strings.TrimRight
func TrimRight(s, cutset string) string
参数 描述
s 原字符串。
cutset 需要去除的字符串。

备注:将字符串右边的指定字符串 cutset 去除


func strings.TrimPrefix
TrimPrefix(s, prefix string) string
参数 描述
s 原字符串。
prefix 需要去除的前缀字符串。

备注:去除字符串的前缀prefix


func strings.TrimSuffix
func TrimSuffix(s, suffix string) string
参数 描述
s 原字符串。
suffix 需要去除的后缀字符串。

备注:去除字符串的后缀suffix


func strings.TrimFunc
func TrimFunc(s string, f func (rune) bool) string 
参数 描述
s 原字符串。
f 需要去除的字符串的规则函数。

备注:将字符串左右两边符合函数 f 规则字符串去除。函数 f,接受一个 rune 类型的参数,返回一个 bool 类型的变量,如果函数 f 返回 true,那说明符合规则,字符将被移除


func strings.TrimLeftFunc
func TrimLeftFunc(s string, f func (rune) bool) string
参数 描述
s 原字符串。
f 需要去除的字符串的规则函数。

备注:将字符串左边符合函数 f 规则字符串去除。函数 f,接受一个 rune 类型的参数,返回一个 bool 类型的变量,如果函数 f 返回 true,那说明符合规则,字符将被移除


func strings.TrimRightFunc
func TrimRightFunc(s string, f func (rune) bool) string
参数 描述
s 原字符串。
f 需要去除的字符串的规则函数。

备注:将字符串右边符合函数 f 规则字符串去除。函数 f,接受一个 rune 类型的参数,返回一个 bool 类型的变量,如果函数 f 返回 true,那说明符合规则,字符将被移除


1.10 字符串遍历处理

func strings.Map
func Map(mapping func (rune) rune, s string) string
参数 描述
mapping 对字符串中每一个字符的处理函数。
s 原字符串。

备注:对字符串 s 中的每一个字符都做 mapping 处理。


1.11 字符串比较
func strings.Compare
func Compare(a, b string) int

备注:比较字符串 a 和字符串 b 是否相等,如果 a > b,返回一个大于 0 的数,如果 a == b,返回 0,否则,返回负数。


func strings.EqualFold
func EqualFold(s, t string) bool

备注:比较字符串 s 和字符串 t 是否相等,如果相等,返回 true,否则,返回 false。该函数比较字符串大小是忽略大小写的。


1.12 字符串重复指定次数

func strings.Repeat
func Repeat(s string, count int) string
参数 描述
s 原字符串。
count 要重复的次数。

备注:将字符串s重复count次。


1.13 字符串替换

func strings.Replace
func Replace(s, old, new string, n int) string
参数 描述
s 原字符串。
old 要替换的字符串。
new 替换成什么字符串。
n 要替换的次数,-1,那么就会将字符串 s 中的所有的 old 替换成 new。

备注:将字符串 s 中的 old 字符串替换成 new 字符串,替换 n 次,返回替换后的字符串。如果 n 是 -1,那么就会将字符串 s 中的所有的 old 替换成 new。


func strings.ReplaceAll
func ReplaceAll(s, old, new string) string
参数 描述
s 原字符串。
old 要替换的字符串。
new 替换成什么字符串。

备注:将字符串 s 中的 old 字符串全部替换成 new 字符串,返回替换后的字符串。


struct strings.Replacer
strings.NewReplacer(oldnew...).Replace(s)

备注:字符串替换


func utils.Replace
func Replace(s string, oldnew map[string]string) string 
参数 描述
s 原字符串。
oldnew 替换规则,map类型, map的键为要替换的字符串,map的值为替换成什么字符串。

备注:内部实现 strings.NewReplacer(oldnew...).Replace(s), 将map 类型 oldnew 转换成了切片, 使用map类型更加直观。


1.14 字符串克隆

func strings.Clone
func Clone(s string) string

备注:返回 s 的新副本。


1.15 字符串反转

func utils.StrRev
func StrRev(str string) string

备注:将支付串str反转


1.16 生成随机字符串

func utils.UniqId
func UniqId(l uint8, r ...*rand.Rand) string
参数 描述
l 生成字符串的长度。
r 随机种子 utils.RandPool():批量生成时传入r参数可提升生成随机数效率。

备注:生成一个长度范围16-32位的唯一ID字符串(可排序的字符串),UniqId函数生成字符串并不保证唯一性。


func utils.RandStr
func RandStr(n int, r ...*rand.Rand) string
参数 描述
n 生成字符串的长度。
r 随机种子 utils.RandPool():批量生成时传入r参数可提升生成随机数效率。

备注:随机生成字符串 LETTERS。LETTERS 值为:a-zA-z


func utils.RandStr2
func RandStr2(n int, r ...*rand.Rand) string
参数 描述
n 生成字符串的长度。
r 随机种子 utils.RandPool():批量生成时传入r参数可提升生成随机数效率。

备注:随机生成字符串 ALPHANUM。ALPHANUM 值为:0-9a-zA-z


func utils.RandStr3
func RandStr3(n int, alpha string, r ...*rand.Rand) string
参数 描述
n 生成字符串的长度。
alpha 生成随机字符串的种子。
r 随机种子 utils.RandPool():批量生成时传入r参数可提升生成随机数效率。

备注:随机生成字符串。alpha 指定生成随机字符串的种子。


1.17 字符串 Read

struct Reader
NewReader(s string).Read((b []byte)

备注:实现了read接口。


1.18 字符转义

func html.EscapeString
func EscapeString(s string) string

备注:将html文本中的字符转换为实体字符。


func html.UnescapeString
func UnescapeString(s string) string

备注:将实体字符转换为可编译的html字符。


func url.QueryEscape
func QueryEscape(s string) string

备注:将URL中的字符进行转义。


func url.QueryUnescape
func QueryUnescape(s string) (string, error)

备注:将URL中的转义字符转换为对应的字符。


2. 编码与解码


2.1 JSON编码解码

func json.Marshal
func Marshal(v any) ([]byte, error)

备注:对数据进行 JSON 编码


func json.Unmarshal
func Unmarshal(data []byte, v any) error

备注:对数据进行 JSON 解码


2.2 BASE64编码解码

文本数据进行 base64 编码
base64.StdEncoding.EncodeToString(src)
文本数据进行 base64 解码
base64.StdEncoding.DecodeString(s)
URL或文件名进行 base64 编码
base64.URLEncoding.EncodeToString(src)
URL或文件名进行 base64 解码
base64.URLEncoding.DecodeString(s)

3. MATH 函数


3.1 math函数

func math.Pow
func Pow(x, y float64) float64

备注:返回x的y次方。


func math.Abs
func Abs(x float64) float64

备注:返回x的绝对值。


func math.Round
func Round(x float64) float64

备注:返回最接近的整数,从零四舍五入。


func math.Ceil
func Ceil(x float64) float64

备注:返回x的上舍入值。


func math.Floor
func Floor(x float64) float64

备注:返回x的下舍入值。


func math.Mod
func Mod(x, y float64) float64

备注:返回x/y的余数。


func math.Max
func Max(x, y float64) float64

备注:返回x和y中最大值。


func math.Min
func Min(x, y float64) float64

备注:返回x和y中最小值。


3.2 utils函数

func utils.Rand
func Rand(min, max int64, r ...*rand.Rand) int64 
参数 描述
min 最小值。
max 最大值。
r 随机种子 utils.RandPool():批量生成时传入r参数可提升生成随机数效率。

备注:返回min~max之间的随机数,值可能包含min和max。


func utils.Round
func Round(value float64, precision int) float64
参数 描述
num 原数值。
precision 保留小数位。

备注:对num进行四舍五入,并保留指定小数位。


4. 文件


4.1 获取文件信息

func os.Stat
func Stat(name string) (FileInfo, error)

备注:获取名为name的文件或目录信息。


4.2 创建与移除

func os.Mkdir
func Mkdir(name string, perm FileMode) error

备注:创建目录。


func os.Remove
func Remove(name string) error

备注:删除名为name的文件。


4.3 打开与创建

func os.OpenFile
func OpenFile(name string, flag int, perm FileMode) (*File, error)

备注:打开名为name的文件。


func os.Create
func Create(name string) (*File, error)

备注:创建名为name的文件。


4.4 读取与写入

func os.ReadFile
func ReadFile(name string) ([]byte, error)

备注:读取名为name的文件内容。


func os.WriteFile
func WriteFile(name string, data []byte, perm FileMode) error

备注:将data数据写入name文件。


4.5 重命名与移动
func os.Rename
func Rename(oldpath, newpath string) error

备注:重命名文件(夹)oldpath为newpath,或移动文件。


4.6 获取目录路径

func os.Getwd
func Getwd() (dir string, err error)

备注:取得当前工作目录的根路径。


func filepath.Abs
func Abs(path string) (string, error)

备注:获取path的绝对路径。


func filepath.IsAbs
func IsAbs(path string) bool

备注:判断path路径是否是绝对路径。


func filepath.Rel
func Rel(basepath, targpath string) (string, error)

备注:返回一个相对路径。


func filepath.Clean
func Clean(path string) string

备注:返回相path的最短路径名。


4.7 权限

func os.Chmod
 func Chmod(name string, mode FileMode) error

备注:改变文件(夹)name的权限。


func os.Chown
  func Chown(name string, uid, gid int) error

备注: 改变文件的所有者。


4.8 解析路径名

func filepath.Ext
  func Ext(path string) string

备注:返回path文件扩展名。


func filepath.Base
  func Base(path string) string

备注: (path为一个文件路径)可获取path中的文件名。


func filepath.Dir
  func Dir(path string) string

备注:获取path路径的目录。


4.9 路径的切分和拼接

func filepath.Split
  func Split(path string) (dir, file string)

备注:将path路径分成dir目录和file文件。


func filepath.Join
  func Join(elem ...string) string

备注:Join函数可以将任意数量的路径元素放入一个单一路径里。


4.10 路径判断

func utils.IsDir
func IsDir(path string) bool

备注:判断给定路径是否是一个目录。


func utils.IsFile
func IsFile(filepath string) bool

备注:判断给定的文件路径名是否是一个文件。


func utils.IsExist
func IsExist(path string) bool

备注:判断一个文件(夹)是否存在。


4.11 获取文件大小

func utils.Size
func Size(filepath string) (int64, error) 

备注:取得文件大小。


func utils.SizeFormat
func SizeFormat(size int64, decimals uint) string 
参数 描述
size 文件实际大小(Byte)。
decimals 保留几位小数。

备注:文件大小格式化已可读式显示文件大小。


4.12 复制文件

func utils.Copy
func Copy(src, dst string) error
参数 描述
src 拷贝的原文件。
dst 拷贝后的文件。

备注:拷贝文件。


4.13 获取目录文件

func utils.FindFiles
func FindFiles(path string, depth bool, match ...string) (files []FileInfo, err error)
参数 描述
path 目录路径。
depth 深度查找: true 采用filepath.WalkDir遍历; false 只在当前目录查找。
match 匹配规则:
- 无参 : 匹配所有文件名 FindFiles(path, depth)
- * : 匹配所有文件名 FindFiles(path, depth, *)
- 文件完整名 : 精准匹配文件名 FindFiles(path, depth, fullFileName)
- e, 文件完整名 : 精准匹配文件名 FindFiles(path, depth, e, fullFileName)
- p, 文件前缀名 : 匹配前缀文件名 FindFiles(path, depth, p, fileNamePrefix)
- s, 文件后缀名 : 匹配后缀文件名 FindFiles(path, depth, s, fileNameSuffix)
- r, 正则表达式 : 正则匹配文件名 FindFiles(path, depth, r, fileNameReg)

备注:获取目录下所有匹配文件。


4.14 内容读取

func utils.Scan
func Scan(r io.Reader, handle ReadScan, size ...int) error
参数 描述
r 实现io.Reader接口。
handle func(num int, line []byte, err error) error 函数。
num 行号: 当前扫描到第几行
line 行数据: 当前扫描的行数据
err 扫描错误信息
error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描
size 设置Scanner.maxTokenSize 的大小(默认值: 64*1024): 单行内容大于该值则无法读取

备注:使用scan扫描文件每一行数据。


func utils.Line
func Line(r io.Reader, handle ReadLine) error
参数 描述
r 实现io.Reader接口。
handle func(num int, line []byte, lineDone bool) error 函数。
num 行号: 当前扫描到第几行
line 行数据: 当前扫描的行数据
lineDone 当前行(num)数据是否读取完毕: true 当前行(num)数据读取完毕; false 当前行(num)数据未读完
error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描

备注:使用scan扫描文件每一行数据。


func utils.Read
func Read(r io.Reader, handle ReadBlock) error
参数 描述
r 实现io.Reader接口。
handle func(size int, block []byte) error 函数。
size 读取的数据块大小
block 读取的数据块
error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描

备注:使用scan扫描文件每一行数据。


4.15 写入内容到文件

func utils.WriteFile
func NewWrite(fileName string, isAppend bool, perm ...os.FileMode) (*WriteFile, error)
参数 描述
fileName 文件路径名。
isAppend 是否追加文件数据: true 每次写入数据在文件末尾追加数据; false 打开文件时会先清除数据。
perm 文件权限: 默认权限 文件夹0744, 文件0644

备注:返回一个WriteFile实例。

// 实例化一个WriteFile
w, err := NewWrite(fileName, isAppend, perm)
if err != nil {
fmt.Errorf("Write() error = %v", err)
return
}

// 关闭文件
defer func () {
if err := w.Close(); err != nil {
fmt.Errorf("Close() err %v", err)
}
}()

// 写入byte数据
n, err := w.Write([]byte{})

// 写入string
n, err := w.WriteString(string)

// 使用bufio写入数据
_, err := w.WriteBuf(func (write *bufio.Writer) (int, error) {
for j := 0; j < 10000; j++ {
_, err := write.WriteString(fmt.Sprintf("WriteBuf %d Name %v; 红酥肯放琼苞碎。探著南枝开遍未。不知酝藉几多香,但见包藏无限意。道人憔悴春窗底。闷损阑干愁不倚。要来小酌便来休,未必明朝风不起。\n", j, tt.name))
if err != nil {
return 0, err
}
}
return 0, nil
})

备注:WriteFile实例化,文件关闭,数据写入。


4.16 获取文件类型

func utils.FileType
func FileType(f *os.File) (string, error)

备注:获取文件类型


5. 加密与解密


5.1 MD5 加密

func utils.Md5
func Md5(str string) string

备注:md5加密


5.2 SHA 加密

func utils.Sha1
func Sha1(str string) string

备注:sha1加密


func utils.Sha256
func Sha256(str string) string

备注:sha256加密


func utils.Sha512
func Sha512(str string) string

备注:sha512加密


5.3 RSA 非对称加密与解密

func utils.GenerateKeyRSA
func GenerateKeyRSA(path string, bits int, pkcs ...bool) ([]string, error)
参数 描述
path 文件名路径。
bits 生成秘钥位大小: 512、1024、2048、4096。
pkcs 秘钥格式, 默认格式(公钥PKCS8格式 私钥PKCS1格式):
- pkcs[0] isPubPKCS8 公钥是否是PKCS8格式: 默认 true
- pkcs[1] isPriPKCS1 私钥是否是PKCS1格式: 默认 true

备注:生成秘钥,默认格式(公钥PKCS8格式 私钥PKCS1格式)。返回两个文件名, 第一个公钥文件名, 第二个私钥文件名。


RSA 加密与解密
// 实例化RSA,并设置key
r, err := NewRSA(publicKey, privateKey, isFilePath)
if err != nil {
fmt.Errorf("NewRSA() err = %v", err)
return
}

// 源数据
marshal, err := json.Marshal(map[string]interface{}{
"Title":   tt.name,
"Content": strings.Repeat("测试内容8282@334&-", 1024) + tt.name,
})

// 公钥加密 PKCS1v15
encodeString, err := r.Encrypt(string(marshal), base64.StdEncoding.EncodeToString)
if err != nil {
fmt.Errorf("Encrypt() err = %v", err)
return
}

// 私钥解密 PKCS1v15
decryptString, err := r.Decrypt(encodeString, base64.StdEncoding.DecodeString)
if err != nil {
fmt.Errorf("Decrypt() err = %v", err)
return
}

// 公钥加密 OAEP
encodeString, err = r.EncryptOAEP(string(marshal), base64.StdEncoding.EncodeToString, sha256.New())
if err != nil {
fmt.Errorf("Encrypt() err = %v", err)
return
}

// 私钥解密 OAEP
decryptString, err = r.DecryptOAEP(encodeString, base64.StdEncoding.DecodeString, sha256.New())
if err != nil {
fmt.Errorf("Decrypt() err = %v", err)
return
}

备注:先实例化RSA 设置公钥私钥,使用公钥加密数据, 私钥解密数据。


RSA 签名与验签
// 实例化RSA,并设置key
r, err := NewRSA(publicKey, privateKey, isFilePath)
if err != nil {
fmt.Errorf("NewRSA() err = %v", err)
return
}

// 源数据
marshal, err := json.Marshal(map[string]interface{}{
"Title":   tt.name,
"Content": strings.Repeat("测试内容8282@334&-", 1024) + tt.name,
})

// 私钥签名 PKCS1v15
sign, err := r.Sign(string(marshal), crypto.SHA256, base64.StdEncoding.EncodeToString)
if err != nil {
fmt.Errorf("Sign() err = %v", err)
return
}

// 公钥验签 PKCS1v15
if err := r.Verify(string(marshal), sign, crypto.SHA256, base64.StdEncoding.DecodeString); err != nil {
fmt.Errorf("Verify() err = %v", err)
return
} else {
fmt.Log("Verify() = 验证成功")
}

// 私钥签名 PSS
sign, err = privRsa.SignPSS(string(marshal), crypto.SHA256, base64.StdEncoding.EncodeToString, nil)
if err != nil {
fmt.Errorf("Sign() err = %v", err)
return
}

// 公钥验签 PSS
if err := pubRsa.VerifyPSS(string(marshal), sign, crypto.SHA256, base64.StdEncoding.DecodeString, nil); err != nil {
fmt.Errorf("Verify() err = %v", err)
return
} else {
fmt.Log("Verify() = 验证成功")
}

备注:先实例化RSA 设置公钥私钥,使用私钥签名,公钥验签。


RSA 秘钥格式转换
// 读取公钥文件内容
pub, err := os.ReadFile(pubFile)
if err != nil {
t.Errorf("ReadFile() WrapError = %v", err)
}

//fmt.Println("公钥 %s", string(pub))
rPub := utils.RemovePEMHeaders(string(pub))
//fmt.Println("remove 公钥 %s", rPub)
aPub := utils.AddPEMHeaders(rPub, "public")
//fmt.Println("add 公钥 %s %v", aPub, strings.EqualFold(aPub, strings.TrimSpace(string(pub))))
if !strings.EqualFold(aPub, strings.TrimSpace(string(pub))) {
fmt.Errorf("转换后的公钥与原始公钥不相等")
}

// 读取私钥文件内容
pri, err := os.ReadFile(priFile)
if err != nil {
t.Errorf("ReadFile() WrapError = %v", err)
}
//fmt.Println("私钥 %s", string(pri))
rPri := utils.RemovePEMHeaders(string(pri))
//fmt.Println("remove 私钥 %s", rPri)
aPri := utils.AddPEMHeaders(rPri, "private")
//fmt.Println("add 私钥 %s %v", aPri, strings.EqualFold(aPri, strings.TrimSpace(string(pri))))
if !strings.EqualFold(aPri, strings.TrimSpace(string(pri))) {
fmt.Errorf("转换后的私钥与原始私钥不相等")
}

5.4 AES 加密与解密

AES 加密与解密
// 实例化AES,并设置key
a, err := AES(key, false)
if err != nil {
fmt.Errorf("NewAES() error = %v", err)
return
}

// 设置iv
if err := a.SetIv(iv); err != nil {
fmt.Errorf("SetIv() error = %v", err)
return
}

// 加密数据
encryptStr, err := a.Encrypt(data, CBC, base64.StdEncoding.EncodeToString, Pkcs7Padding)
if err != nil {
fmt.Errorf("Encrypt() mode = %v error = %v", CBC, err)
return
}

// 解密数据
got, err := a.Decrypt(encryptStr, CBC, base64.StdEncoding.DecodeString, Pkcs7UnPadding)
if err != nil {
fmt.Errorf("Decrypt() mode = %v error = %v", CBC, err)
return
}

备注:先实例化AES 设置key,更新需要设置IV,之后便可加密或解密数据。


5.5 DES 加密与解密

DES 加密与解密
// 实例化DES,并设置key
a, err := DES(key, false)
if err != nil {
fmt.Errorf("NewAES() error = %v", err)
return
}

// 设置iv
if err := a.SetIv(iv); err != nil {
fmt.Errorf("SetIv() error = %v", err)
return
}

// 加密数据
encryptStr, err := a.Encrypt(data, MCRYPT_MODE_CBC, base64.StdEncoding.EncodeToString, Pkcs7Padding)
if err != nil {
fmt.Errorf("Encrypt() mode = %v error = %v", CBC, err)
return
}

// 解密数据
got, err := a.Decrypt(encryptStr, MCRYPT_MODE_CBC, base64.StdEncoding.DecodeString, Pkcs7UnPadding)
if err != nil {
fmt.Errorf("Decrypt() mode = %v error = %v", CBC, err)
return
}

备注:先实例化DES 设置key,更新需要设置IV,之后便可加密或解密数据。


5.6 pkcs7 填充与反填充

func utils.Pkcs7Padding
func Pkcs7Padding(data []byte, blockSize int) []byte

备注:数据填充。


func utils.Pkcs7UnPadding
func Pkcs7UnPadding(data []byte) ([]byte, error) 

备注:数据反填充。


5.7 0 填充与反填充

func utils.ZeroPadding
func ZeroPadding(data []byte, blockSize int) []byte 

备注:数据填充。


func utils.ZeroUnPadding
func ZeroUnPadding(data []byte) ([]byte, error)

备注:数据反填充。


6. 整形、字符串转换


6.1 字符串转整形

func strconv.ParseInt
func ParseInt(s string, base int, bitSize int) (i int64, err error)

备注:string 转 int64。


func strconv.Atoi
func Atoi(s string) (int, error)

备注:string 转 int。


func utils.Str2Int64
func Str2Int64(s string) (i int64)

备注:string 转 int64,转换失败返回零值。


func utils.Str2Int
func Str2Int(s string) (i int) 

备注:string 转 int,转换失败返回零值。


6.2 整形转字符串

func strconv.FormatInt
func FormatInt(i int64, base int) string

备注:int64 转 string。


func strconv.Itoa
func Itoa(i int) string

备注:int 转 string。


6.3 字符串转浮点数

func strconv.ParseFloat
func ParseFloat(s string, bitSize int) (float64, error) 

备注:string 转 float64。


func utils.Str2Float
func Str2Float(s string) (i float64)

备注:string 转 float64,失败返回零值。


6.4 浮点数转字符串

func strconv.FormatFloat
func FormatFloat(f float64, fmt byte, prec, bitSize int) string

备注:float64 转 string。


6.5 以千位分隔符方式格式化一个数字

func utils.NumberFormat
func NumberFormat(number float64, decimals uint, decPoint, thousandsSep string) string 
参数 描述
number 需要格式化的数字。
decimals 保留几位小数。
decPoint 小数点[.]
thousandsSep 千位分隔符[,]

备注:以千位分隔符方式格式化一个数字。


6.6 进制转换

func utils.BinOct
func BinOct(str string) (string, error)

备注:二进制转换为八进制。


func utils.BinDec
func BinDec(str string) (int64, error)

备注:二进制转换为十进制。


func utils.BinHex
func BinHex(str string) (string, error)

备注:二进制转换为十六进制。


func utils.OctBin
func OctBin(data string) (string, error)

备注:八进制转换为二进制。


func utils.OctDec
func OctDec(str string) (int64, error)

备注:八进制转换为十进制。


func utils.OctHex
func OctHex(data string) (string, error)

备注:八进制转换为十六进制。


func utils.DecBin
func DecBin(number int64) string

备注:十进制转换为二进制。


func utils.DecOct
func DecOct(number int64) string

备注:十进制转换为八进制。


func utils.DecHex
func DecHex(number int64) string

备注:十进制转换为十六进制。


func utils.HexBin
func HexBin(data string) (string, error) 

备注:十六进制转换为二进制。


func utils.HexOct
func HexOct(str string) (string, error)

备注:十六进制转换为八进制。


func utils.HexDec
func HexDec(str string) (int64, error)

备注:十六进制转换为十进制。


7. 数组/切片/链表


7.1 检查数组中是否存在某个值

func utils.IsHas
func IsHas[T Ordered](v T, s []T) bool

备注:检查s中是否存在v。1.21版本以上推荐使用标准库 slices.Contains(s,v)


7.2 统计某个值在数组中出现次数

func utils.HasCount
func HasCount[T Ordered](v T, s []T) (count int) 

备注:统计v在s中出现次数。


7.3 反转数组

func utils.Reverse
func Reverse[T Ordered](s []T) []T

备注:反转s。1.21版本以上推荐使用标准库 slices.Reverse(s)


7.4 去除数组中重复的值

func utils.Unique
func Unique[T Ordered](s []T) []T

备注:去除s中重复的值。


7.5 计算两个数组的差集

func utils.Diff
func Diff[T Ordered](s1, s2 []T) []T

备注:计算s1与s2的差集。


7.6 计算两个数组的交集

func utils.Intersect
func Intersect[T Ordered](s1, s2 []T) []T

备注:计算s1与s2的交集。


7.7 列表 status container/list.List

创建列表
// 通过 list.New 创建列表
l := list.New()

// 添加元素
l.PushBack("5")
l.PushBack("6")

// 列表遍历
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println("Element =", i.Value)
}

输出:

Element = 5
Element = 6

在列表头部插入元素
// 在列表头部插入
ele4 := l.PushFront("4")

输出:

Element = 4
Element = 5
Element = 6

在列表尾部插元素
// 在列表尾部插
ele8 := l.PushBack("8")

输出:

Element = 4
Element = 5
Element = 6
Element = 8

在列表指定元素前插入
// 在指定元素ele4前插入元素"3"
ele3 := l.InsertBefore("3", ele4)

输出:

Element = 3
Element = 4
Element = 5
Element = 6
Element = 8

在列表指定元素后插入
// 在指定元素ele8后插入元素"9"
ele9 := l.InsertAfter("9", ele8)

输出:

Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9

获取列表头结点
// 获取列表头结点
front := l.Front()
fmt.Println("front =", front.Value)

输出:

front = 3

获取列表尾结点
// 获取列表尾结点
back := l.Back()
fmt.Println("back =", back.Value)

输出:

back = 9

获取上一个结点
// 获取ele4上一个结点
prev := ele4.Prev()
fmt.Println("ele4 prev =", prev.Value)

输出:

ele4 prev = 3

获取下一个结点
// 获取ele4下一个结点
next := ele4.Next()
fmt.Println("ele4 next =", next.Value)

输出:

ele4 next = 5

移动到某元素的前面
// 将ele4元素移动到back元素的前面
l.MoveBefore(ele4, back)

输出:

移动前:
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9
--------------
移动后:
Element = 3
Element = 5
Element = 6
Element = 8
Element = 4
Element = 9

移动到某元素的后面
// 将ele4元素移动到back元素的后面
l.MoveAfter(ele4, back)

输出:

移动前:
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9
--------------
移动后:
Element = 3
Element = 5
Element = 6
Element = 8
Element = 9
Element = 4

移动到列表的最前面
// 将ele9元素移动到列表的最前面
l.MoveToFront(ele9)

输出:

移动前:
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9
--------------
移动后:
Element = 9
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8

移动到列表的最面
// 将ele3元素移动到列表的最后面
l.MoveToFront(ele3)

输出:

移动前:
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9
--------------
移动后:
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9

列表正序遍历
// 列表正序遍历
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println("Element =", i.Value)
}

输出:

Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9

列表倒叙遍历
// 列表倒叙遍历
for i := l.Back(); i != nil; i = i.Prev() {
fmt.Println("Element =", i.Value)
}

输出:

Element = 9
Element = 8
Element = 6
Element = 5
Element = 4
Element = 3

在列表中删除元素
// 在列表中删除ele4元素
l.Remove(ele4)
// 在列表中删除ele8元素
l.Remove(ele8)

输出:

删除前:
Element = 3
Element = 4
Element = 5
Element = 6
Element = 8
Element = 9
--------------
删除后:
Element = 3
Element = 5
Element = 6
Element = 9

在列表头部插入一个列表
// 创建一个列表(头部列表)
frontList := list.New()
frontList.PushBack("f1")
frontList.PushBack("f2")

// 在列表头部插入一个列表
l.PushFrontList(frontList)

输出:

添加前:
Element = 3
Element = 4
--------------
添加后:
Element = f1
Element = f2
Element = 3
Element = 4

在列表尾部插入一个列表
// 创建一个列表(尾部列表)
backList := list.New()
backList.PushBack("b1")
backList.PushBack("b2")

// 在列表尾部插入一个列表
l.PushBackList(backList)

输出:

添加前:
Element = 3
Element = 4
--------------
添加后:
Element = 3
Element = 4
Element = b1
Element = b2

获取列表长度
l.Len()

初始化或清除列表
l.Init()

8. map/syncMap


8.1 获取map的所有key

func utils.MapKeys
func MapKeys[K Ordered, V any](m map[K]V) []K 

备注:获取map所有的key


8.2 有序获取map的所有value

func utils.MapValues
func MapValues[K Ordered, V any](m map[K]V, isReverse ...bool) []V 
参数 描述
m map。
isReverse 是否降序排列:true 降序,false 升序。

备注:对map的key排序并按排序后的key返回其value


8.3 有序遍历map元素

func utils.MapRange
func MapRange[K Ordered, V any](m map[K]V, f func (key K, value V) bool, isReverse ...bool)
参数 描述
m map。
f f 函数接收key与value,返回一个bool值,如果f函数返回false则终止遍历
isReverse 是否降序排列:true 降序,false 升序。

备注:对map的key排序并按排序后的key遍历map的元素,如果f 函数返回 false则终止遍历。


8.4 过滤map的元素

func utils.MapFilter
func MapFilter[K Ordered, V any](m map[K]V, f func (key K, val V) bool) map[K]V 
参数 描述
m map。
f f 函数接收key与value,返回一个bool值,如果f函数返回false则过滤掉该元素(删除该元素)

备注:使用回调函数过滤map的元素,如果f 函数返回 false则过滤掉该元素(删除该元素)。


8.5 计算两个map的差集

func utils.MapDiff
func MapDiff[K, V Ordered](m1, m2 map[K]V) []V

备注:计算m1与m2的值差集。


func utils.MapDiffKey
func MapDiffKey[K Ordered, V any](m1, m2 map[K]V) []K 

备注:计算m1与m2的键差集。


8.6 计算两个map的交集

func utils.MapIntersect
func MapIntersect[K, V Ordered](m1, m2 map[K]V) []V

备注:计算m1与m2的值交集。


func utils.MapIntersectKey
func MapIntersectKey[K Ordered, V any](m1, m2 map[K]V) []K

备注:计算m1与m2的键交集。


8.7 sync.Map

创建sync.Map
//sync.Map 声明完之后,可以立即使用
var m sync.Map
m.Store("Server", "Golang")
m.Store("JavaScript", "Vue")

备注:创建map。


添加元素 Store
func (m *Map) Store(key, value interface{})

备注:向 map 中存入键为 key,值为 value 的键值对,这里的 key 和 value 都是 * interface* 类型的,因此 key 和 value 可以存入任意的类型。


获取元素 Load
func (m *Map) Load(key interface{}) (value interface{}, ok bool)

备注:返回的 value 是 interface 类型的,因此 value 我们不可以直接使用,而必须要转换之后才可以使用,返回的ok是 bool 值,表明获取是否成功。


获取或添加 LoadOrStore
func (m *Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) 

备注:获取的 key 存在,返回 key 对应的元素,如果获取的 key 不存在,就返回设置的值,并且将设置的值,存入 map。


删除元素 Delete
func (m *Map) Delete(key interface{})

备注:删除元素,使用 sync.Map Delete 删除不存在的元素,不会报错。


获取并删除 LoadAndDelete
func (m *Map) LoadAndDelete(key any) (value any, loaded bool)

备注:如果key存在返回key的值并删除该key。


遍历元素 Range
func (m *Map) Range(f func (key, value interface{}) bool)

备注:遍历元素,如果f 函数返回 false则终止遍历。


9. 时间


9.1 时区

func utils.Local
func Local() *time.Location

备注:系统运行时区。


func utils.CST
func CST() *time.Location 

备注:东八时区。


func utils.UTC
func UTC() *time.Location 

备注:UTC时区。


9.2 验证日期:年、月、日

func utils.CheckDate
func CheckDate(year, month, day int) bool
参数 描述
year 年份。
month 月份。
day 日期。

备注:验证日期:年、月、日。


9.3 获取指定月份有多少天

func utils.MonthDay
func MonthDay(year int, month int) (days int)
参数 描述
year 年份。
month 月份。

备注:获取指定月份有多少天。


9.4 增加时间

func utils.AddTime
func AddTime(t time.Time, addTimes ...string) (time.Time, error)
参数 描述
addTimes 增加时间(Y年,M月,D日,H时,I分,S秒,L毫秒,C微妙,N纳秒)。

备注:增加时间。


9.5 获取日期信息

func utils.DateInfo
func DateInfo(t time.Time) map[string]interface{}

备注:获取日期信息。

//	返回:year int - 年,
//		month int - 月,monthEn string - 英文月,
//		day int - 日,yearDay int - 一年中第几日, weekDay int - 一周中第几日,
//		hour int - 时,hour int - 分,second int - 秒,
//		millisecond int - 毫秒,microsecond int - 微妙,nanosecond int - 纳秒,
//		unix int64 - 时间戳-秒,unixNano int64 - 时间戳-纳秒,
//		weekDay int - 星期几,weekDayEn string - 星期几英文, yearWeek int - 一年中第几周,
//		date string - 格式化日期,dateNs string - 格式化日期(纳秒)

9.6 时间格式化为时间字符串

func utils.TimeFormat
func TimeFormat(timeZone *time.Location, layout string, timestamp ...int64) string
参数 描述
timeZone 时区。
layout 格式化。
timestamp Unix 时间sec秒和nsec纳秒。

备注:时间格式化为时间字符串。


9.7 解析时间字符串为time.Time

func utils.TimeParse
func TimeParse(timeZone *time.Location, layout, timeStr string) (time.Time, error)
参数 描述
timeZone 时区。
layout 格式化。
timeStr 时间字符串。

备注:解析时间字符串为time.Time。


9.8 两个时间字符串判断

func utils.Before
func Before(layout string, t1, t2 string) (bool, error) 
参数 描述
layout 格式化。
t1 时间字符串。
t2 时间字符串。

备注:返回true: t1在t2之前(t1小于t2),返回false: t1大于等于t2。


func utils.After
func After(layout string, t1, t2 string) (bool, error) 
参数 描述
layout 格式化。
t1 时间字符串。
t2 时间字符串。

备注:返回true: t1在t2之后(t1大于t2),返回false: t1小于等于t2。


func utils.Equal
func Equal(layout string, t1, t2 string) (bool, error)
参数 描述
layout 格式化。
t1 时间字符串。
t2 时间字符串。

备注:判断t1是否与t2相等。


9.9 求两个时间字符串的时间差

func utils.Sub
func Sub(layout string, t1, t2 string) (int, error)
参数 描述
layout 格式化。
t1 时间字符串。
t2 时间字符串。

备注:t1与t2的时间差,t1>t2 结果大于0,否则结果小于等于0。


func time.Since
func Since(t Time) Duration

示例,程序运行时间:

// 开始时间
start := time.Now()

// 业务逻辑
time.Sleep(time.Second)

// 求时间差
diff := time.Since(start)
fmt.Printf("运行时间:%v", diff) // 运行时间:1.001284412s

备注:求某个时间与现在的时间差。


10. 函数验证、正则验证


func utils.Empty
func Empty(value string) bool 

备注:空字符串验证。


func utils.QQ
func QQ(value string) bool

备注:QQ号验证。


func utils.Email
func Email(value string) bool

备注:电子邮件验证。


func utils.Mobile
func Mobile(value string) bool

备注:中国大陆手机号码验证。


func utils.Phone
func Phone(value string) bool

备注:中国大陆电话号码验证。


func utils.Numeric
func Numeric(value string) bool

备注:有符号数字验证。


func utils.UnNumeric
func UnNumeric(value string) bool

备注:无符号数字验证。


func utils.UnInteger
func UnInteger(value string) bool

备注:无符号整数(正整数)验证。


func utils.UnIntZero
func UnIntZero(value string) bool

备注:无符号整数(正整数+0)验证。


func utils.Amount
func Amount(amount string, decimal uint8, signed ...bool) bool
参数 描述
amount 金额字符串。
decimal 保留小数位长度。
signed 带符号的金额: 默认无符号。

备注:金额验证。


func utils.Alpha
func Alpha(value string) bool

备注:英文字母验证。


func utils.Zh
func Zh(value string) bool

备注:中文字符验证。


func utils.MixStr
func MixStr(value string) bool 

备注:英文、数字、特殊字符(不包含换行符)。


func utils.Alnum
func Alnum(value string) bool

备注:英文字母+数字验证。


func utils.Domain
func Domain(value string) bool

备注:域名(64位内正确的域名,可包含中文、字母、数字和.-)。


func utils.TimeMonth
func TimeMonth(value string) bool

备注:时间格式验证 yyyy-MM yyyy/MM。


func utils.TimeDay
func TimeDay(value string) bool

备注:时间格式验证 yyyy-MM-dd。


func utils.Timestamp
func Timestamp(value string) bool

备注:Timestamp 时间格式验证 yyyy-MM-dd hh:mm:ss。


func utils.Account
func Account(value string, min, max uint8) error

备注:帐号验证(字母开头,允许字母数字下划线,长度在min-max之间)。


func utils.PassWord
func PassWord(value string, min, max uint8) error

备注:密码(字母开头,允许字母数字下划线,长度在 min - max之间)。


func utils.PassWord2
func PassWord2(value string, min, max uint8) error

备注:强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在min-max之间)。


func utils.PassWord3
func PassWord3(value string, min, max uint8) error

备注:强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在min-max之间)。


func utils.HasSymbols
func HasSymbols(value string) bool

备注:是否包含符号。


两个时间字符串判断

备注:参考9.7 两个时间字符串判断。


11. http/curl


11.1 模拟curl请求

请求方式:GET、POST(form,file)、HEAD、PUT、PATCH、DELETE、OPTIONS


GET 请求方式
func (c *Curl) Get(url string) (err error)

备注:参考测试用例:TestGet


POST 请求方式
func (c *Curl) Post(url string) (err error) 

备注:参考测试用例:TestPost


POST FORM 请求方式
func (c *Curl) PostForm(url string) error 

备注:参考测试用例:TestPostForm


POST FILE 请求方式
func (c *Curl) Post(url string) (err error) 

备注:参考测试用例:TestPostFile


12. http/response


12.1 重定向

func utils.Redirect
func Redirect(w http.ResponseWriter, url string, statusCode ...int)
参数 描述
url 重定向地址
statusCode 响应状态码:默认响应 302
http.HandleFunc("/response/redirect", func(w http.ResponseWriter, r *http.Request) {
		// 重定向
		utils.Redirect(w, "/response/json")
	})

备注:重定向。


12.2 响应JSON

func utils.JsonResp
// JsonResp 响应Json数据
func JsonResp[T any](w http.ResponseWriter, statusCode ...int) *Response[T]

// Success 成功响应返回Json数据
func (r *Response[T]) Success(code int, data T, message ...string)

// Fail 失败响应返回Json数据
func (r *Response[T]) Fail(code int, message string, data ...T)

示例:

// 响应json数据
http.HandleFunc("/json", func(w http.ResponseWriter, r *http.Request) {

  // 获取URL查询字符串参数
  queryParam := r.URL.Query().Get("v")

  // 响应的数据
  user := User{
    Name:      "张三",
    Age:       22,
    Sex:       "男",
    IsMarried: false,
    Address:   "北京市",
    phone:     "131188889999",
  }

  if queryParam == "fail" {
    // 错误响应
    utils.JsonResp[User](w, http.StatusNotAcceptable).Fail(2000, "fail", user)
    return
  }
  // 成功响应
  utils.JsonResp[User](w).Success(1000, user)
})

备注:响应JSON数据,响应成功:JsonResp().Success(),响应失败:JsonResp().Fail()。


12.3 响应HTML

// 响应html
http.HandleFunc("/response/html", func(w http.ResponseWriter, r *http.Request) {

  // 响应html数据
  utils.View(w).Html("<p>这是一个<b style=\"color: red\">段落!</b></p>")
})

备注:响应HTML文本 View().Html()。


12.4 响应XML

// 响应xml
http.HandleFunc("/response/xml", func(w http.ResponseWriter, r *http.Request) {

  // 响应的数据
  user := User{
    Name:      "张三",
    Age:       22,
    Sex:       "男",
    IsMarried: false,
    Address:   "北京市",
    phone:     "131188889999",
  }

  // 响应xml数据
  utils.View(w).Xml(user)
})

备注:响应XML文本 View().Xml()。


12.5 响应TEXT

// 响应text
http.HandleFunc("/response/text", func(w http.ResponseWriter, r *http.Request) {
  // 响应text数据
  utils.View(w).Text("<p>这是一个<b style=\"color: red\">段落!</b></p>")
})

备注:响应TEXT文本 View().Text()。


12.6 显示图片

// 响应image
http.HandleFunc("/response/show", func(w http.ResponseWriter, r *http.Request) {
  // 获取URL查询字符串参数
  file := r.URL.Query().Get("file")
  if utils.IsExist(file) {
    // 显示文件内容

    utils.View(w).Show(file)
    return
  }
  // 处理错误
  utils.View(w, http.StatusNotFound).Text("不存在的文件:" + file)
})

备注:显示文件内容 View().Show()。


12.7 下载文件

// 下载文件
http.HandleFunc("/response/download", func(w http.ResponseWriter, r *http.Request) {
		// 获取URL查询字符串参数
		file := r.URL.Query().Get("file")
		if utils.IsExist(file) {
			// 下载文件数据
			utils.View(w).Download(file)
			return
		}
		// 处理错误
		utils.View(w, http.StatusNotFound).Text("不存在的文件:" + file)
})

备注:下载文件 View().Download()。


13. 打包压缩


13.1 zip

func utils.Zip
func Zip(zipFile string, files []string) error
参数 描述
zipFile 打包压缩后文件
files 待打包压缩文件【夹】

备注:使用zip打包并压缩。


func utils.UnZip
func UnZip(zipFile, destDir string) error
参数 描述
zipFile 代解压的文件
destDir 解压文件目录

备注:解压zip文件。


13.2 tar

func utils.Tar
func Tar(tarFile string, files []string) error 
参数 描述
tarFile 打包后文件
files 待打包文件【夹】

备注:使用tar打包。


func utils.TarGz
func TarGz(tarGzFile string, files []string) error
参数 描述
tarGzFile 打包压缩后文件
files 待打包压缩文件【夹】

备注:使用tar打包。


func utils.UnTar
func UnTar(tarFile, destDir string) error 
参数 描述
tarFile 代解压的文件
destDir 解压文件目录

备注:解压zip文件。


14. 日志


14.1 默认日志(使用标准库的 log 包来记录日志)

设置日志等级和输出格式
// 日志等级
levelVar := &slog.LevelVar{}
levelVar.Set(slog.LevelDebug)

opts := &slog.HandlerOptions{
  AddSource: true,     // 输出日志的文件和行号
  Level:     levelVar, // 日志等级
}

//日志输出文件
file, err := os.OpenFile("sys.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
  fmt.Printf("Faild to open error logger file: %v\n", err)
  return
}

// 日志输出格式
//handler := slog.NewTextHandler(os.Stdout, opts)
handler := slog.NewJSONHandler(io.MultiWriter(file, os.Stderr), opts)

// 修改默认的日志输出方式
slog.SetDefault(slog.New(handler))

备注:设置日志级别,小于该级别的日志不会输出。禁用日志 设置 DISABLE 级别


15. 杂项


15.1 环境变量

func os.Getenv
func Getenv(key string) strin

备注:获取环境变量。


func utils.GetEnv
func GetEnv(key string, defaultVal ...string) string 
参数 描述
key 变量名。
defaultVal 未获取到时默认返回的值。

备注:获取环境变量。


func os.Setenv
func Setenv(key, value string) error

备注:设置环境变量。


func os.Unsetenv
func Unsetenv(key string) error

备注:删除环境变量。


15.2 IP

func utils.ServerIP
func ServerIP() string

备注:服务器对外IP。


func utils.LocalIP
func LocalIP() string

备注:服务器本地IP。


func utils.ClientIP
func ClientIP(r *http.Request) string

备注:获取客户端IP。


15.3 三目运算

func utils.Ternary
func Ternary[T any](expr bool, trueVal, falseVal T) T 
参数 描述
expr bool表达式。
trueVal expr为true时返回值。
falseVal expr为false时返回值。

备注:类似于三目运算的函数。

15.4 获取当前行号、方法名、文件地址

func utils.RuntimeInfo
func RuntimeInfo(skip int) *Frame

备注:获取当前行号、方法名、文件地址。

Documentation

Index

Examples

Constants

View Source
const (
	Byte int64 = 1 << (10 * iota) // 1Byte
	KB                            // 1024Byte = 1KB
	MB                            // 1048576Byte = 1024KB = 1MB
	GB                            // 1073741824Byte = 1048576KB = 1024MB = 1GB
	TB                            // 1099511627776Byte = ...
	PB                            // 1125899906842624Byte
	EB                            // 1152921504606846976Byte
)

计算机存储单位:Byte、KB、MB、GB、TB、PB、EB int64最大支持EB

View Source
const (
	Year   string = "2006" // 年
	Month  string = "01"   // 月
	Day    string = "02"   // 日
	Hour   string = "15"   // 时
	Minute string = "04"   // 分
	Second string = "05"   // 秒

	DateMonth       = Year + "-" + Month         // 2006-01
	DateHour        = time.DateOnly + " " + Hour // 2006-01-02 15
	DateMinute      = DateHour + ":" + Minute    // 2006-01-02 15:04
	DateMillisecond = time.DateTime + ".000"     // 2006-01-02 15:04:05.000
	DateMicrosecond = DateMillisecond + "000"    // 2006-01-02 15:04:05.000000
	DateNanosecond  = DateMicrosecond + "000"    // 2006-01-02 15:04:05.000000000

	MonthSeam  = Year + Month        // 200601
	DaySeam    = MonthSeam + Day     // 20060102
	HourSeam   = DaySeam + Hour      // 2006010215
	MinuteSeam = HourSeam + Minute   // 200601021504
	SecondSeam = MinuteSeam + Second // 20060102150405
)

时间格式化格式

View Source
const (
	// ALPHA 英文字母:A-Za-z
	ALPHA = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`

	// DIGIT 数字:0-9
	DIGIT = `0123456789`

	// ALNUM 英文字母+数字:A-Za-z0-9
	ALNUM = ALPHA + DIGIT
)

Variables

View Source
var DONE = errors.New("DONE")

DONE 完成终止

View Source
var RandPool = &sync.Pool{New: func() interface{} {
	return rand.New(rand.NewPCG(uint64(time.Now().UnixNano()), uint64(time.Now().UnixNano())))
}}

RandPool rand

Functions

func Account

func Account(value string, min, max uint8) error

Account 帐号验证(字母开头,允许字母数字下划线,长度在min-max之间)

func AddFileToTar

func AddFileToTar(tarWriter *tar.Writer, fileToCompress string, baseDir string) error

AddFileToTar 添加文件【夹】到tar

fileToCompress 需要压缩的文件
baseDir 打包文件根目录

func AddFileToZip

func AddFileToZip(zipWriter *zip.Writer, fileToCompress string, baseDir string) error

AddFileToZip 添加文件【夹】到zip

fileToCompress 需要压缩的文件
baseDir 打包文件根目录

func AddPEMHeaders added in v1.21.5

func AddPEMHeaders(key, keyType string) (string, error)

AddPEMHeaders 为 RSA 密钥串添加头尾标记

key 秘钥
keyType 秘钥类型

func AddTime added in v1.21.4

func AddTime(t time.Time, addTimes ...string) (time.Time, error)

AddTime 增加时间

addTimes 增加时间(Y年,M月,D日,H时,I分,S秒,L毫秒,C微妙,N纳秒)

示例:DateInfo(time, "-1D", "1M", "-1Y", "+4H", "20I", "30S", "76N")

func After

func After(layout string, t1, t2 string) (bool, error)

After 返回true: t1在t2之后(t1大于t2),返回false: t1小于等于t2。

func Alnum added in v1.22.10

func Alnum(value string) bool

Alnum 英文字母+数字验证

func Alpha

func Alpha(value string) bool

Alpha 英文字母验证

func Amount

func Amount(amount string, decimal uint8, signed ...bool) bool

Amount 金额验证

amount 金额字符串
decimal 保留小数位长度
signed 带符号的金额: 默认无符号

func Before

func Before(layout string, t1, t2 string) (bool, error)

Before 返回true: t1在t2之前(t1小于t2),返回false: t1大于等于t2。

func BinDec

func BinDec(str string) (int64, error)

BinDec 二进制转换为十进制

func BinHex

func BinHex(str string) (string, error)

BinHex 二进制转换为十六进制

func BinOct

func BinOct(str string) (string, error)

BinOct 二进制转换为八进制

func CST

func CST() *time.Location

CST 东八时区

func Certificate

func Certificate(config *tls.Config, certFile, keyFile string) error

Certificate HTTPS请求证书

certFile 证书
keyFile 秘钥

func CheckDate

func CheckDate(year, month, day int) bool

CheckDate 验证日期:年、月、日

func ClientIP

func ClientIP(r *http.Request) string

ClientIP 获取客户端IP

func Copy

func Copy(src, dst string) error

Copy 拷贝文件

src 拷贝的源文件
dst 拷贝后的文件

func Date

func Date(timeZone *time.Location, layout string, timestamp ...int64) string

Date 使用 patterns 定义的格式对时间格式化

timeZone 时区
layout 格式化,例:
 - Date(timeZone, "Y-m-d H:i:s", unix)
timestamp Unix时间戳:sec秒和nsec纳秒

func DateInfo

func DateInfo(t time.Time) map[string]interface{}

DateInfo 获取日期信息

返回:year int - 年,
	month int - 月,monthEn string - 英文月,
	day int - 日,yearDay int - 一年中第几日, weekDay int - 一周中第几日,
	hour int - 时,hour int - 分,second int - 秒,
	millisecond int - 毫秒,microsecond int - 微妙,nanosecond int - 纳秒,
	unix int64 - 时间戳-秒,unixNano int64 - 时间戳-纳秒,
	weekDay int - 星期几,weekDayEn string - 星期几英文, yearWeek int - 一年中第几周,
	date string - 格式化日期,dateNs string - 格式化日期(纳秒)

func DecBin

func DecBin(number int64) string

DecBin 十进制转换为二进制

func DecHex

func DecHex(number int64) string

DecHex 十进制转换为十六进制

func DecOct

func DecOct(number int64) string

DecOct 十进制转换为八进制

func Diff added in v1.22.0

func Diff[T Ordered](s1, s2 []T) []T

Diff 计算s1与s2的差集

func Domain

func Domain(value string) bool

Domain 域名(64位内正确的域名,可包含中文、字母、数字和.-)

func DrainBody

func DrainBody(b io.ReadCloser) ([]byte, io.ReadCloser, error)

DrainBody 读取read内容并返回其内容和一个新的ReadCloser,

func Email

func Email(value string) bool

Email 电子邮件验证

func Empty

func Empty(value string) bool

Empty 空字符串验证

func Equal

func Equal(layout string, t1, t2 string) (bool, error)

Equal 判断t1是否与t2相等

func FileType added in v1.21.0

func FileType(f *os.File) (string, error)

FileType 文件类型

func GenerateKeyRSA

func GenerateKeyRSA(path string, bits int, pkcs ...bool) ([]string, error)

GenerateKeyRSA 生成秘钥(公钥PKCS8格式 私钥PKCS1格式)

path 秘钥存放地址
bits 生成秘钥位大小: 512、1024、2048、4096
pkcs 秘钥格式, 默认格式(公钥PKCS8格式 私钥PKCS1格式):
 - pkcs[0] isPubPKCS8 公钥是否是PKCS8格式: 默认 true
 - pkcs[1] isPriPKCS1 私钥是否是PKCS1格式: 默认 true

RETURN:
- []string 返回两个文件名, 第一个公钥文件名, 第二个私钥文件名

func GetEnv

func GetEnv(key string, defaultVal ...string) string

GetEnv 获取环境变量值

defaultVal 未获取到时默认返回的值

func GetRandPool added in v1.22.0

func GetRandPool() *rand.Rand

GetRandPool 获取随机种子

func HasCount

func HasCount[T Ordered](v T, s []T) (count int)

HasCount 统计v在s中出现次数

func HasSymbols

func HasSymbols(value string) bool

HasSymbols 是否包含符号

func HexBin

func HexBin(data string) (string, error)

HexBin 十六进制转换为二进制

func HexDec

func HexDec(str string) (int64, error)

HexDec 十六进制转换为十进制

func HexOct

func HexOct(str string) (string, error)

HexOct 十六进制转换为八进制

func Intersect added in v1.22.0

func Intersect[T Ordered](s1, s2 []T) []T

Intersect 计算s1与s2的交集

func IsDir

func IsDir(path string) bool

IsDir 判断给定路径是否是一个目录

func IsExist

func IsExist(path string) bool

IsExist 判断一个文件(夹)是否存在

func IsFile

func IsFile(filepath string) bool

IsFile 判断给定的文件路径名是否是一个文件

func IsHas

func IsHas[T Ordered](v T, s []T) bool

IsHas 检查s中是否存在v。 1.21版本以上推荐使用标准库 slices.Contains(s,v)

func Line

func Line(r io.Reader, handle ReadLine) error

Line 读取一行数据: 读取大文件大行数据性能略优于Scan

func Local

func Local() *time.Location

Local 系统运行时区

func LocalIP

func LocalIP() string

LocalIP 本地IP

func LogArgsFormat added in v1.21.0

func LogArgsFormat(args []any) string

LogArgsFormat 根据参数生成Format

func MapDiff

func MapDiff[K, V Ordered](m1, m2 map[K]V) []V

MapDiff 计算m1与m2的值差集

func MapDiffKey

func MapDiffKey[K Ordered, V any](m1, m2 map[K]V) []K

MapDiffKey 计算m1与m2的键差集

func MapFilter

func MapFilter[K Ordered, V any](m map[K]V, f func(key K, value V) bool) map[K]V

MapFilter 使用回调函数过滤map的元素

f 函数接收key与value,返回一个bool值,如果f函数返回false则过滤掉该元素(删除该元素)

func MapIntersect

func MapIntersect[K, V Ordered](m1, m2 map[K]V) []V

MapIntersect 计算m1与m2的值交集

func MapIntersectKey

func MapIntersectKey[K Ordered, V any](m1, m2 map[K]V) []K

MapIntersectKey 计算m1与m2的键交集

func MapKeys

func MapKeys[K Ordered, V any](m map[K]V) []K

MapKeys 获取map的所有key

func MapRange

func MapRange[K Ordered, V any](m map[K]V, f func(key K, value V) bool, isReverse ...bool)

MapRange 有序遍历map元素,对map的key排序并按排序后的key遍历m

f 函数接收key与value,返回一个bool值,如果f函数返回false则终止遍历
isReverse 是否降序排列:true 降序,false 升序

func MapValues

func MapValues[K Ordered, V any](m map[K]V, isReverse ...bool) []V

MapValues 有序获取map的所有value,对map的key排序并按排序后的key返回其value

isReverse 是否降序排列:true 降序,false 升序

func Marshal

func Marshal(v any) ([]byte, error)

Marshal 对数据进行 JSON 编码

func Md5

func Md5(str string) string

Md5 md5加密

func MixStr

func MixStr(value string) bool

MixStr 英文、数字、特殊字符(不包含换行符)

func Mobile

func Mobile(value string) bool

Mobile 中国大陆手机号码验证

func MonthDay

func MonthDay(year int, month int) (days int)

MonthDay 获取指定月份有多少天

year 年
month 月

func NumberFormat

func NumberFormat(number float64, decimals uint, decPoint, thousandsSep string) string

NumberFormat 以千位分隔符方式格式化一个数字

number 要格式化的数字
decimals 保留几位小数
decPoint 小数点[.]
thousandsSep 千位分隔符[,]

func Numeric

func Numeric(value string) bool

Numeric 有符号数字验证

func OctBin

func OctBin(data string) (string, error)

OctBin 八进制转换为二进制

func OctDec

func OctDec(str string) (int64, error)

OctDec 八进制转换为十进制

func OctHex

func OctHex(data string) (string, error)

OctHex 八进制转换为十六进制

func PassWord

func PassWord(value string, min, max uint8) error

PassWord 密码(字母开头,允许字母数字下划线,长度在 min - max之间)

func PassWord2

func PassWord2(value string, min, max uint8) error

PassWord2 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在min-max之间)

func PassWord3

func PassWord3(value string, min, max uint8) error

PassWord3 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在min-max之间)

func Phone

func Phone(value string) bool

Phone 中国大陆电话号码验证

func Pkcs7Padding

func Pkcs7Padding(data []byte, blockSize int) []byte

Pkcs7Padding 填充

func Pkcs7UnPadding

func Pkcs7UnPadding(data []byte) ([]byte, error)

Pkcs7UnPadding 填充的反向操作

func ProxyURL

func ProxyURL(transport *http.Transport, proxyURL string) error

ProxyURL 设置代理地址

func QQ

func QQ(value string) bool

QQ QQ号验证

func Rand

func Rand(minInt, maxInt int64, r ...*rand.Rand) int64

Rand 返回min~max之间的随机数,值可能包含min和max

minInt 最小值
maxInt 最大值
r 随机种子 rand.NewSource(time.Now().UnixNano()) : 批量生成时传入r参数可提升生成随机数效率

func RandStr

func RandStr(n int, r ...*rand.Rand) string

RandStr 随机生成字符串,使用LETTERS规则

n 生成字符串长度
r 随机种子 rand.NewSource(time.Now().UnixNano()) : 批量生成时传入r参数可提升生成随机数效率

func RandStr2

func RandStr2(n int, r ...*rand.Rand) string

RandStr2 随机生成字符串,使用ALPHANUM规则

n 生成字符串长度
r 随机种子 rand.NewSource(time.Now().UnixNano()) : 批量生成时传入r参数可提升生成随机数效率

func RandStr3

func RandStr3(n int, alpha string, r ...*rand.Rand) string

RandStr3 随机生成字符串

n 生成字符串长度
alpha 生成随机字符串的种子
r 随机种子 rand.NewSource(time.Now().UnixNano()) : 批量生成时传入r参数可提升生成随机数效率

func Read

func Read(r io.Reader, handle ReadBlock) error

Read 使用分块读取文件数据, 读取大文件或无换行的文件

func Redirect

func Redirect(w http.ResponseWriter, url string, statusCode ...int)

Redirect 重定向

url 重定向地址
statusCode 响应状态码:默认响应 302
Example
serveMux.HandleFunc("/response/redirect", func(w http.ResponseWriter, r *http.Request) {
	// 重定向
	utils.Redirect(w, "/response/json")
})
Output:

func RemovePEMHeaders added in v1.21.5

func RemovePEMHeaders(pem string) string

RemovePEMHeaders 去掉 RSA秘钥串 头尾标记和换行符

pem 秘钥

func Replace

func Replace(s string, oldnew map[string]string) string

Replace 字符串替换

s 源字符串
oldnew 替换规则,map类型, map的键为要替换的字符串,map的值为替换成什么字符串。

func Reverse

func Reverse[T Ordered](s []T) []T

Reverse 反转s 1.21版本以上推荐使用标准库 slices.Reverse(s)

func RootCAs

func RootCAs(config *tls.Config, rootCAs string) error

RootCAs HTTPS请求证书

caCertPath 根证书

func Round

func Round(num float64, precision int) float64

Round 对num进行四舍五入,并保留指定小数位

precision 保留小数位

func Scan

func Scan(r io.Reader, handle ReadScan, size ...int) error

Scan 使用scan扫描文件每一行数据

size 设置Scanner.maxTokenSize 的大小(默认值: 64*1024): 单行内容大于该值则无法读取

func ServerIP

func ServerIP() string

ServerIP 服务器对外IP

func SetJsonMethod

func SetJsonMethod(encode func(v any) ([]byte, error), decode func(data []byte, v any) error)

SetJsonMethod 设置json编码解码方法(三方开源库), 若未设置则默认使用encoding/json(标准库)。只需在程序入口处设置一次

func Sha1

func Sha1(str string) string

Sha1 sha1加密

func Sha256

func Sha256(str string) string

Sha256 sha256加密

func Sha512

func Sha512(str string) string

Sha512 sha512加密

func Size

func Size(filepath string) (int64, error)

Size 取得文件大小

func SizeFormat

func SizeFormat(size int64, decimals uint) string

SizeFormat 文件大小格式化已可读式显示文件大小

size 文件实际大小(Byte)
decimals 保留几位小数

func Str2Float

func Str2Float(s string) (i float64)

Str2Float string 转 float64,失败返回零值。

func Str2Int

func Str2Int(s string) (i int)

Str2Int string 转 int,失败返回零值。

func Str2Int64

func Str2Int64(s string) (i int64)

Str2Int64 string 转 int64,失败返回零值。

func StrRev

func StrRev(str string) string

StrRev 反转字符串

func Strtotime

func Strtotime(timeZone *time.Location, parse ...string) (t time.Time, err error)

Strtotime 解析时间字符串(不确定的时间格式,尽可能解析时间字符串)

timeZone 时区
parse 解析时间字符串包含两个参数:
 - layout 格式化样式字符串
 - timeStr 时间字符串
例:
 - Strtotime(timeZone, "2006-01-02 15:04:05") // 当前时间
 - Strtotime(timeZone, "2006-01-02 15:04:05", timeStr) // 指定时间timeStr
 - Strtotime(timeZone, "Y-m-d H:i:s") // 当前时间
 - Strtotime(timeZone, "Y-m-d H:i:s", timeStr) // 指定时间timeStr

func Sub

func Sub(layout string, t1, t2 string) (time.Duration, error)

Sub t1与t2的时间差,t1>t2 结果大于0,否则结果小于等于0

func Substr

func Substr(str string, start, length int) string

Substr 字符串截取

str 被截取的字符串
start  截取的起始位置,即截取的第一个字符所在的索引:
	- start小于0时,start = len(str) + start
length  截取的截止位置,即截取的最后一个字符所在的索引:
	- length大于0时,length表示为截取子字符串的长度,截取的最后一个字符所在的索引值为:start + length
	- length小于0时,length表示为截取的最后一个字符所在的索引,值为:len(str) + length + 1
	- 例如:等于-1时,表示截取到最后一个字符;等于-2时,表示截取到倒数第二个字符

func Tar

func Tar(tarFile string, files []string) error

Tar 使用tar打包

tarFile 打包后文件
files 待打包文件【夹】

func TarGz

func TarGz(tarGzFile string, files []string) error

TarGz 使用tar打包gzip压缩

tarGzFile 打包压缩后文件
files 待打包压缩文件【夹】

func Ternary

func Ternary[T any](expr bool, trueVal, falseVal T) T

Ternary 类似于三目运算

expr bool表达式
trueVal expr为true时返回值
falseVal expr为false时返回值

func TimeDay

func TimeDay(value string) bool

TimeDay 时间格式验证 yyyy-MM-dd

func TimeFormat

func TimeFormat(timeZone *time.Location, layout string, timestamp ...int64) string

TimeFormat 时间戳格式化为时间字符串

timeZone 时区
layout 格式化,例:
 - TimeFormat(timeZone, "2006-01-02 15:04:05", unix)
timestamp Unix时间戳:sec秒和nsec纳秒

func TimeMonth

func TimeMonth(value string) bool

TimeMonth 时间格式验证 yyyy-MM yyyy/MM

func TimeParse

func TimeParse(timeZone *time.Location, layout, timeStr string) (time.Time, error)

TimeParse 解析时间字符串

timeZone 时区
layout 格式化,例:
 - TimeFormat(timeZone, "2006-01-02 15:04:05", timeStr)
timeStr 时间字符串

func Timestamp

func Timestamp(value string) bool

Timestamp 时间格式验证 yyyy-MM-dd hh:mm:ss

func UTC

func UTC() *time.Location

UTC UTC时区

func UnIntZero added in v1.22.10

func UnIntZero(value string) bool

UnIntZero 无符号整数(正整数+0)验证

func UnInteger

func UnInteger(value string) bool

UnInteger 无符号整数(正整数)验证

func UnNumeric

func UnNumeric(value string) bool

UnNumeric 无符号数字验证

func UnTar

func UnTar(tarFile, destDir string) error

UnTar 解压.tar或.tar.gz文件

tarFile 代解压的文件
destDir 解压文件目录

func UnZip

func UnZip(zipFile, destDir string) error

UnZip 解压zip文件

zipFile 代解压的文件
destDir 解压文件目录

func UniqId

func UniqId(l uint8, r ...*rand.Rand) string

UniqId 生成一个长度范围16-32位的唯一ID字符串(可排序的字符串),UniqId只生成字符串并不保证唯一性。 UniqId将int64时间戳转换成36位字符串(长度12位)剩余长度使用rand随机生成int64数字并转换成36位字符串。

l 生成UniqId长度: 取值范围[16-32], 小于16按16位处理, 大于32按32位处理
r 随机种子 rand.NewSource(time.Now().UnixNano()) : 批量生成时传入r参数可提升生成随机数效率

func Unique added in v1.22.0

func Unique[T Ordered](s []T) []T

Unique 去除s中重复的值

func Unmarshal

func Unmarshal(data []byte, v any) error

Unmarshal 对数据进行 JSON 解码

func UrlPath

func UrlPath(urlPath string, params url.Values) (string, error)

UrlPath 组装带参数的url

func ZeroPadding

func ZeroPadding(data []byte, blockSize int) []byte

ZeroPadding 填充

func ZeroUnPadding

func ZeroUnPadding(data []byte) ([]byte, error)

ZeroUnPadding 填充的反向操作

func Zh

func Zh(value string) bool

Zh 中文字符验证

func Zip

func Zip(zipFile string, files []string) error

Zip 使用zip打包并压缩

zipFile 打包压缩后文件
files 待打包压缩文件【夹】

Types

type Body

type Body[T any] struct {
	Success bool   `json:"success"` // 响应状态:true 成功, false 失败
	Code    int    `json:"code"`    // 响应识别码
	Message string `json:"message"` // 响应信息
	Data    T      `json:"data"`    // 响应数据
}

type Cipher

type Cipher struct {
	// contains filtered or unexported fields
}

func AES

func AES(key string, isRandIV ...bool) (*Cipher, error)

AES AES加密解密

key 秘钥
isRandIV 随机生成IV: true 随机生成的IV会在加密后的密文开头

func DES

func DES(key string, isRandIV ...bool) (*Cipher, error)

DES des加密解密

key 秘钥
isRandIV 随机生成IV: true 随机生成的IV会在加密后的密文开头

func DES3

func DES3(key string, isRandIV ...bool) (*Cipher, error)

DES3 des3加密解密

key 秘钥
isRandIV 随机生成IV: true 随机生成的IV会在加密后的密文开头

func NewCipher

func NewCipher(key string, block CipherBlock, isRandIV bool) (*Cipher, error)

NewCipher Cipher

key 秘钥
block 密码: (AES | DES).NewCipher
isRandIV 随机生成IV: true 随机生成的IV会在加密后的密文开头

func (*Cipher) Check

func (c *Cipher) Check() error

Check 校验key 和 iv

func (*Cipher) Decrypt

func (c *Cipher) Decrypt(encrypt string, mode McryptMode, decode Decode, unPadding UnPadding) (string, error)

Decrypt 加密

encrypt 待解密数据
mode 加密模式:
 - ECB: Decrypt(encrypt, ECB, decode, unPadding)
 - CBC: Decrypt(encrypt, CBC, decode, unPadding)
 - CTR: Decrypt(encrypt, CTR, decode, unPadding)
 - CFB: Decrypt(encrypt, CFB, decode, unPadding)
 - OFB: Decrypt(encrypt, OFB, decode, unPadding)
decode 解码方法
unPadding 去除填充数据方法

func (*Cipher) DecryptCBC

func (c *Cipher) DecryptCBC(data []byte, unPadding UnPadding) ([]byte, error)

DecryptCBC 解密

func (*Cipher) DecryptCFB

func (c *Cipher) DecryptCFB(data []byte, unPadding UnPadding) ([]byte, error)

DecryptCFB 解密

func (*Cipher) DecryptCTR

func (c *Cipher) DecryptCTR(data []byte, unPadding UnPadding) ([]byte, error)

DecryptCTR 解密

func (*Cipher) DecryptECB

func (c *Cipher) DecryptECB(data []byte, unPadding UnPadding) ([]byte, error)

DecryptECB 解密

func (*Cipher) DecryptOFB

func (c *Cipher) DecryptOFB(data []byte, unPadding UnPadding) ([]byte, error)

DecryptOFB 解密

func (*Cipher) Encrypt

func (c *Cipher) Encrypt(data string, mode McryptMode, encode Encode, padding Padding) (string, error)

Encrypt 加密

data 待加密数据
mode 加密模式:
 - ECB: Encrypt(data, ECB, encode, padding)
 - CBC: Encrypt(data, CBC, encode, padding)
 - CTR: Encrypt(data, CTR, encode, padding)
 - CFB: Encrypt(data, CFB, encode, padding)
 - OFB: Encrypt(data, OFB, encode, padding)
encode 编码方法
padding 填充数据方法

func (*Cipher) EncryptCBC

func (c *Cipher) EncryptCBC(data []byte, padding Padding) ([]byte, error)

EncryptCBC 加密

func (*Cipher) EncryptCFB

func (c *Cipher) EncryptCFB(data []byte, padding Padding) ([]byte, error)

EncryptCFB 加密

func (*Cipher) EncryptCTR

func (c *Cipher) EncryptCTR(data []byte, padding Padding) ([]byte, error)

EncryptCTR 加密

func (*Cipher) EncryptECB

func (c *Cipher) EncryptECB(data []byte, padding Padding) ([]byte, error)

EncryptECB 加密

func (*Cipher) EncryptOFB

func (c *Cipher) EncryptOFB(data []byte, padding Padding) ([]byte, error)

EncryptOFB 加密

func (*Cipher) IsSetKey

func (c *Cipher) IsSetKey() bool

IsSetKey 是否设置了key

func (*Cipher) SetIv

func (c *Cipher) SetIv(iv string) error

SetIv 加密偏移量

func (*Cipher) SetKey added in v1.21.0

func (c *Cipher) SetKey(key string, block CipherBlock) (err error)

SetKey 设置秘钥

type CipherBlock

type CipherBlock func([]byte) (cipher.Block, error)

CipherBlock 密码(AES | DES)

  • aes.NewCipher
  • des.NewCipher
  • des.NewTripleDESCipher

type Curl

type Curl struct {

	// 日志
	Logger *slog.Logger
	// contains filtered or unexported fields
}

func NewCurl

func NewCurl() *Curl

func (*Curl) AddCookies

func (c *Curl) AddCookies(cookies ...*http.Cookie) *Curl

AddCookies 设置cookies

func (*Curl) AddHeader

func (c *Curl) AddHeader(key string, values ...string) *Curl

AddHeader 对header键添加多个值

func (*Curl) AddHeaders

func (c *Curl) AddHeaders(Headers map[string][]string) *Curl

AddHeaders 对header键添加多个值

func (*Curl) AddParam

func (c *Curl) AddParam(key string, values ...string) *Curl

AddParam 对params键添加多个值

func (*Curl) AddParams

func (c *Curl) AddParams(params map[string][]string) *Curl

AddParams 对params键添加多个值

func (*Curl) ClearCookies

func (c *Curl) ClearCookies()

ClearCookies 清空cookie

func (*Curl) Client

func (c *Curl) Client(f func(request *http.Client) error) *Curl

Client 在发送请求之前可以对Client处理方法

func (*Curl) CloseIdleConnections

func (c *Curl) CloseIdleConnections()

CloseIdleConnections 关闭连接

func (*Curl) DelCookies

func (c *Curl) DelCookies(cookieName ...string)

DelCookies 删除cookie

func (*Curl) DelHeaders

func (c *Curl) DelHeaders(keys ...string)

DelHeaders 删除header键值

func (*Curl) DelParams

func (c *Curl) DelParams(keys ...string)

DelParams 删除params键值

func (*Curl) Delete

func (c *Curl) Delete(url string) (err error)

Delete 请求方式

func (*Curl) Done

func (c *Curl) Done(f func(client *http.Client, request *http.Request, response *http.Response)) *Curl

Done 请求完成后的处理方法, 如关闭连接等操作。 注意:client、request、response 有可能为nil

func (*Curl) Get

func (c *Curl) Get(url string) (err error)

Get 请求方式

func (*Curl) GetCookie

func (c *Curl) GetCookie(cookieName string) *http.Cookie

GetCookie 获取cookies指定键的值

func (*Curl) GetHeader

func (c *Curl) GetHeader() http.Header

GetHeader 获取header

func (*Curl) GetHeaderValues

func (c *Curl) GetHeaderValues(key string) []string

GetHeaderValues 获取header内指定键的值

func (*Curl) GetParamValues

func (c *Curl) GetParamValues(key string) []string

GetParamValues 获取params指定键的值

func (*Curl) GetParams

func (c *Curl) GetParams() url.Values

GetParams 获取params

func (*Curl) GetRequestId

func (c *Curl) GetRequestId() string

GetRequestId 获取请求ID

func (*Curl) HasCookie

func (c *Curl) HasCookie(cookieName string) bool

HasCookie 检查cookies是否设置了给定的cookie名

func (*Curl) HasHeader

func (c *Curl) HasHeader(key string) bool

HasHeader 检查header内是否设置了指定的键

func (*Curl) HasParam

func (c *Curl) HasParam(key string) bool

HasParam 检查params是否设置了给定的key

func (*Curl) Head

func (c *Curl) Head(url string) error

Head 请求方式

func (*Curl) InsecureSkipVerify

func (c *Curl) InsecureSkipVerify(isSkip bool) *Curl

InsecureSkipVerify 设置是否跳过https不安全验证

func (*Curl) Options

func (c *Curl) Options(url string) (err error)

Options 请求方式

func (*Curl) Patch

func (c *Curl) Patch(url string) (err error)

Patch 请求方式

func (*Curl) Post

func (c *Curl) Post(url string) (err error)

Post 请求方式

func (*Curl) PostForm

func (c *Curl) PostForm(url string) error

PostForm 请求方式

func (*Curl) Put

func (c *Curl) Put(url string) (err error)

Put 请求方式

func (*Curl) ReSetHeader

func (c *Curl) ReSetHeader(header http.Header) *Curl

ReSetHeader 重置header

func (*Curl) ReSetParams

func (c *Curl) ReSetParams(params url.Values) *Curl

ReSetParams 重置params

func (*Curl) Request

func (c *Curl) Request(f func(request *http.Request) error) *Curl

Request 在发送请求之前可以对Request处理方法

func (*Curl) Resolve

func (c *Curl) Resolve(f func(body []byte) error) *Curl

Resolve 在发送请求之后可以对Response.Body处理方法

func (*Curl) Response

func (c *Curl) Response(f func(response *http.Response) (isDone bool, err error)) *Curl

Response 在发送请求之后可以对Response处理方法

isDone 返回true 终止调用该方法之后的代码; 返回false 继续执行后续代码

func (*Curl) Send

func (c *Curl) Send(method, url string, body io.Reader) (err error)

Send 发起请求

method 请求方式:GET, POST, PUT, DELETE, PATCH, HEAD
url 请求地址
body 请求体

func (*Curl) SetBasicAuth

func (c *Curl) SetBasicAuth(username, password string) *Curl

SetBasicAuth 设置Basic认证的账号及密码

func (*Curl) SetBody

func (c *Curl) SetBody(body io.Reader) *Curl

SetBody 设置请求体

func (*Curl) SetBodyBytes

func (c *Curl) SetBodyBytes(body []byte) *Curl

SetBodyBytes 设置请求体

func (*Curl) SetCertKey

func (c *Curl) SetCertKey(cert, key string) *Curl

SetCertKey 设置证书和秘钥

func (*Curl) SetContentType

func (c *Curl) SetContentType(contentType string) *Curl

SetContentType 设置请求头 Content-Type

contentType 类型:"application/x-www-form-urlencoded", "application/json", "multipart/form-data", "text/plain"

func (*Curl) SetCookies

func (c *Curl) SetCookies(cookies ...*http.Cookie) *Curl

SetCookies 设置cookies

func (*Curl) SetDefLogOutput added in v1.21.0

func (c *Curl) SetDefLogOutput(enable bool) *Curl

SetDefLogOutput 打印默认日志(INFO及以下级别日志: true 打印, false 禁止打印

func (*Curl) SetDump

func (c *Curl) SetDump(dump bool) *Curl

SetDump dump模式会详细打印请求和响应的信息,否则只记录关键信息

func (*Curl) SetHeader

func (c *Curl) SetHeader(key, value string) *Curl

SetHeader 设置header键值对

func (*Curl) SetHeaders

func (c *Curl) SetHeaders(headers map[string]string) *Curl

SetHeaders 设置header键值对

func (*Curl) SetMaxRetry added in v1.21.0

func (c *Curl) SetMaxRetry(max uint8) *Curl

SetMaxRetry 设置失败重连次数

func (*Curl) SetParam

func (c *Curl) SetParam(key, value string) *Curl

SetParam 设置params键值对

func (*Curl) SetParams

func (c *Curl) SetParams(params map[string]string) *Curl

SetParams 设置params键值对

func (*Curl) SetProxyURL

func (c *Curl) SetProxyURL(proxyURL string) *Curl

SetProxyURL 设置代理地址

func (*Curl) SetRequestId

func (c *Curl) SetRequestId(requestId ...string) *Curl

SetRequestId 设置RequestId

func (*Curl) SetRootCAs

func (c *Curl) SetRootCAs(rootCAs string) *Curl

SetRootCAs 设置根证书

func (*Curl) SetStatusCode

func (c *Curl) SetStatusCode(statusCode ...int) *Curl

SetStatusCode 设置返回状态码,除200以外需特殊处理的状态码

func (*Curl) SetTimeout

func (c *Curl) SetTimeout(timeout uint8) *Curl

SetTimeout 设置超时时间

func (*Curl) SetUserAgent

func (c *Curl) SetUserAgent(userAgent string) *Curl

SetUserAgent 设置请求头 User-Agent

type Decode

type Decode func(string) ([]byte, error)

Decode 解密方法

  • hex.DecodeString
  • base64.StdEncoding.DecodeString

type Encode

type Encode func([]byte) string

Encode 加密方法

  • hex.EncodeToString
  • base64.StdEncoding.EncodeToString

type FileInfo

type FileInfo struct {
	fs.FileInfo
	Path string // 文件相对路径
}

FileInfo 文件信息

func FindFiles

func FindFiles(path string, depth bool, match ...string) (files []FileInfo, err error)

FindFiles 获取目录下所有匹配文件

path 目录
depth 深度查找: true 采用filepath.WalkDir遍历; false 只在当前目录查找
match 匹配规则:
 - `无参` : 匹配所有文件名 FindFiles(path, depth)
 - `*`   : 匹配所有文件名 FindFiles(path, depth, `*`)
 - `文件完整名`      : 精准匹配文件名 FindFiles(path, depth, fullFileName)
 - `e`, `文件完整名` : 精准匹配文件名 FindFiles(path, depth, `e`, fullFileName)
 - `p`, `文件前缀名` : 匹配前缀文件名 FindFiles(path, depth, `p`, fileNamePrefix)
 - `s`, `文件后缀名` : 匹配后缀文件名 FindFiles(path, depth, `s`, fileNameSuffix)
 - `r`, `正则表达式` : 正则匹配文件名 FindFiles(path, depth, `r`, fileNameReg)

type Float

type Float interface {
	~float32 | ~float64
}

Float 浮点数

type Form

type Form struct {
	Params url.Values
	Files  url.Values
}

Form 表单

func (*Form) AddFile

func (f *Form) AddFile(fileName string, filePath ...string) *Form

AddFile 对Files键添加多个值

func (*Form) AddFiles

func (f *Form) AddFiles(files map[string][]string) *Form

AddFiles 对Files键添加多个值

func (*Form) AddParam

func (f *Form) AddParam(key string, values ...string) *Form

AddParam 对Params键添加多个值

func (*Form) AddParams

func (f *Form) AddParams(params map[string][]string) *Form

AddParams 对Params键添加多个值

func (*Form) DelFiles

func (f *Form) DelFiles(fileNames ...string)

DelFiles 删除Files键值

func (*Form) DelParams

func (f *Form) DelParams(keys ...string)

DelParams 删除Params键值

func (*Form) Reader

func (f *Form) Reader() (body io.Reader, contentType string, err error)

Reader 读取Form内容,转换为以键值对上传文件和表单的body及content-type

func (*Form) SetFile

func (f *Form) SetFile(fileName, filePath string) *Form

SetFile 设置Files键值对

func (*Form) SetFiles

func (f *Form) SetFiles(files map[string]string) *Form

SetFiles 设置Files键值对

func (*Form) SetParam

func (f *Form) SetParam(key, value string) *Form

SetParam 设置Params键值对

func (*Form) SetParams

func (f *Form) SetParams(params map[string]string) *Form

SetParams 设置Params键值对

type Frame added in v1.21.1

type Frame struct {
	Func string //方法名
	File string //文件名
	Line int    //行号
}

func RuntimeInfo

func RuntimeInfo(skip int) *Frame

RuntimeInfo 获取运行时行号、方法名、文件地址

type Integer

type Integer interface {
	Signed | Unsigned
}

Integer 整数

type McryptMode

type McryptMode int8

McryptMode 密码模式

const (
	ECB McryptMode = iota // 0 电码本模式(Electronic Codebook Book,ECB),ECB无须设置初始化向量IV
	CBC                   // 1 密码分组链接模式(Cipher Block Chaining ,CBC),如果明文长度不是分组长度16字节(des 8字节)的整数倍需要进行填充
	CTR                   // 2 计算器模式(Counter,CTR)
	CFB                   // 3 密码反馈模式(Cipher FeedBack,CFB)
	OFB                   // 4 输出反馈模式(Output FeedBack,OFB)
)

加密模式

type Number

type Number interface {
	Integer | Float
}

Number 数字

type Ordered

type Ordered interface {
	Number | ~string
}

Ordered 数字或字符串

type Padding

type Padding func([]byte, int) []byte

Padding 填充数据方法

  • Pkcs7Padding
  • ZeroPadding

type RSA

type RSA struct {
	// contains filtered or unexported fields
}

func NewPriRSA

func NewPriRSA(pri string, isFilePath ...bool) (*RSA, error)

NewPriRSA 实例化RSA并设置私钥,用于解密或签名

func NewPubRSA

func NewPubRSA(pub string, isFilePath ...bool) (*RSA, error)

NewPubRSA 实例化RSA并设置公钥,用于加密或验证签名

func NewRSA

func NewRSA(pub, pri string, isFilePath ...bool) (*RSA, error)

NewRSA 实例化RSA并设置公钥和私钥

func (*RSA) Decrypt

func (r *RSA) Decrypt(encrypt string, decode Decode) (string, error)

Decrypt 解密(私钥)

encrypt 代解密数据
decode 解码方法

func (*RSA) DecryptOAEP added in v1.21.5

func (r *RSA) DecryptOAEP(encrypt string, decode Decode, hash hash.Hash) (string, error)

DecryptOAEP 解密(私钥)

encrypt 代解密数据
decode 解码方法
hash OAEP编码方法

func (*RSA) Encrypt

func (r *RSA) Encrypt(data string, encode Encode) (string, error)

Encrypt 加密(公钥)

data 待加密数据
encode 编码方法

func (*RSA) EncryptOAEP added in v1.21.5

func (r *RSA) EncryptOAEP(data string, encode Encode, hash hash.Hash) (string, error)

EncryptOAEP 加密(公钥)

data 待加密数据
encode 编码方法
hash OAEP编码方法

func (*RSA) IsSetPrivateKey

func (r *RSA) IsSetPrivateKey() error

IsSetPrivateKey 是否正确设置 PrivateKey

func (*RSA) IsSetPublicKey

func (r *RSA) IsSetPublicKey() error

IsSetPublicKey 是否正确设置 PublicKey

func (*RSA) SetPrivateKey

func (r *RSA) SetPrivateKey(privateKey string, isFilePath ...bool) error

SetPrivateKey 设置私钥

privateKey 私钥(路径)
isFilePath publicKey 传的是否是文件路径

func (*RSA) SetPublicKey

func (r *RSA) SetPublicKey(publicKey string, isFilePath ...bool) error

SetPublicKey 设置公钥

publicKey 公钥(路径)
isFilePath publicKey 传的是否是文件路径

func (*RSA) Sign

func (r *RSA) Sign(data string, hash crypto.Hash, encode Encode) (string, error)

Sign 签名(私钥)

data 待签名数据
hash 加密哈希函数标识:
 - crypto.SHA256 : Sign(data, crypto.SHA256, encode)
 - crypto.MD5 : Sign(data, crypto.MD5, encode)
encode - 编码方法

func (*RSA) SignPSS added in v1.21.5

func (r *RSA) SignPSS(data string, hash crypto.Hash, encode Encode, opts *rsa.PSSOptions) (string, error)

SignPSS 签名(私钥)

data 待签名数据
hash 加密哈希函数标识:
 - crypto.SHA256 : Sign(data, crypto.SHA256, encode)
 - crypto.MD5 : Sign(data, crypto.MD5, encode)
encode - 编码方法
opts - *rsa.PSSOptions

func (*RSA) Verify

func (r *RSA) Verify(data, sign string, hash crypto.Hash, decode Decode) error

Verify 验证签名(公钥)

data 待验证数据
sign 签名串
hash 加密哈希函数标识:
 - crypto.SHA256 : Verify(data, signature, crypto.SHA256, decode)
 - crypto.MD5 : Verify(data, signature, crypto.MD5, decode)
decode 解码方法

func (*RSA) VerifyPSS added in v1.21.5

func (r *RSA) VerifyPSS(data, sign string, hash crypto.Hash, decode Decode, opts *rsa.PSSOptions) error

VerifyPSS 验证签名(公钥)

data 待验证数据
sign 签名串
hash 加密哈希函数标识:
 - crypto.SHA256 : Verify(data, signature, crypto.SHA256, decode)
 - crypto.MD5 : Verify(data, signature, crypto.MD5, decode)
decode 解码方法

type ReadBlock

type ReadBlock func(size int, block []byte) error

ReadBlock 处理读取的数据块

  • size 读取的数据块大小
  • block 读取的数据块 返回值 - error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描

type ReadLine

type ReadLine func(num int, line []byte, lineDone bool) error

ReadLine 处理scan扫描的行数据

  • num 行号: 当前扫描到第几行
  • line 行数据: 当前扫描的行数据
  • lineDone 当前行(num)数据是否读取完毕: true 当前行(num)数据读取完毕; false 当前行(num)数据未读完 返回值 - error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描

type ReadScan

type ReadScan func(num int, line []byte, err error) error

ReadScan 处理scan扫描的行数据

  • num 行号: 当前扫描到第几行
  • line 行数据: 当前扫描的行数据
  • WrapError 扫描错误信息 返回值 - error 处理错误信息: 返回的 error == DONE 代表正确处理完数据并终止扫描

type Response

type Response[T any] struct {
	Body[T]
	// contains filtered or unexported fields
}

func JsonResp

func JsonResp[T any](w http.ResponseWriter, statusCode ...int) *Response[T]

JsonResp 响应Json数据

statusCode 响应状态码:默认响应 200
Example
// 响应json数据
serveMux.HandleFunc("/response/json", func(w http.ResponseWriter, r *http.Request) {
	// 获取URL查询字符串参数
	queryParam := r.URL.Query().Get("v")
	// 响应的数据
	user := User{
		Name:      "张三",
		Age:       22,
		Sex:       "男",
		IsMarried: false,
		Address:   "北京市",
		phone:     "131188889999",
	}

	if queryParam == "fail" {
		// 错误响应
		utils.JsonResp[any](w, http.StatusNotAcceptable).Fail(20000, "fail")
		return
	}

	// 成功响应
	utils.JsonResp[User](w).Success(10000, user)
})
Output:

func View

func View(w http.ResponseWriter, statusCode ...int) *Response[string]

View 响应文本视图

statusCode 响应状态码:默认响应 200
Example
// 响应html
serveMux.HandleFunc("/response/html", func(w http.ResponseWriter, r *http.Request) {

	// 响应html数据
	utils.View(w).Html("<p>这是一个<b style=\"color: red\">段落!</b></p>")
})

// 响应xml
serveMux.HandleFunc("/response/xml", func(w http.ResponseWriter, r *http.Request) {

	// 响应的数据
	user := User{
		Name:      "张三",
		Age:       22,
		Sex:       "男",
		IsMarried: false,
		Address:   "北京市",
		phone:     "131188889999",
	}

	// 响应xml数据
	utils.View(w).Xml(user)
})

// 响应text
serveMux.HandleFunc("/response/text", func(w http.ResponseWriter, r *http.Request) {
	// 响应text数据
	utils.View(w).Text("<p>这是一个<b style=\"color: red\">段落!</b></p>")
})

// 显示image
serveMux.HandleFunc("/response/show", func(w http.ResponseWriter, r *http.Request) {
	// 获取URL查询字符串参数
	file := r.URL.Query().Get("file")
	if utils.IsExist(file) {
		// 显示文件内容

		utils.View(w).Show(file)
		return
	}
	// 处理错误
	utils.View(w, http.StatusNotFound).Text("不存在的文件:" + file)
})

// 下载文件
serveMux.HandleFunc("/response/download", func(w http.ResponseWriter, r *http.Request) {
	// 获取URL查询字符串参数
	file := r.URL.Query().Get("file")
	if utils.IsExist(file) {
		// 下载文件数据
		utils.View(w).Download(file)
		return
	}
	// 处理错误
	utils.View(w, http.StatusNotFound).Text("不存在的文件:" + file)
})
Output:

func (*Response[T]) ContentType

func (r *Response[T]) ContentType(contentType string) *Response[T]

ContentType 设置响应头 Content-Type

func (*Response[T]) Download

func (r *Response[T]) Download(filePath string, rename ...string)

Download 响应下载文件

filePath 文件路径
rename 重命名文件名

func (*Response[T]) Encode

func (r *Response[T]) Encode() ([]byte, error)

Encode 对数据编码

func (*Response[T]) Fail

func (r *Response[T]) Fail(code int, message string, data ...T)

Fail 失败响应返回Json数据

code 响应识别码
message 响应信息
data 响应数据

func (*Response[T]) Herder

func (r *Response[T]) Herder(f func(header http.Header)) *Response[T]

Herder 设置响应头

func (*Response[T]) Html

func (r *Response[T]) Html(data string)

Html 响应Html

func (*Response[T]) Show

func (r *Response[T]) Show(filePath string)

Show 响应显示文件内容:如图片

func (*Response[T]) StatusCode

func (r *Response[T]) StatusCode(statusCode int) *Response[T]

StatusCode 设置响应状态码,如:http.StatusOK

func (*Response[T]) Success

func (r *Response[T]) Success(code int, data T, message ...string)

Success 成功响应返回Json数据

code 响应识别码
data 响应数据
message 响应信息

func (*Response[T]) Text

func (r *Response[T]) Text(data string)

Text 响应text

func (*Response[T]) Write

func (r *Response[T]) Write(body []byte)

Write 写入响应数据

func (*Response[T]) Xml

func (r *Response[T]) Xml(data any)

Xml 响应Xml

type Signed

type Signed interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

Signed 有符合整数

type Slice

type Slice[T Ordered] []T

Slice 数字或字符串类型slice

实现了排序接口, 可用sort.Sort(Slice) 排序

func (Slice[T]) Len

func (s Slice[T]) Len() int

func (Slice[T]) Less

func (s Slice[T]) Less(i, j int) bool

func (Slice[T]) Swap

func (s Slice[T]) Swap(i, j int)

type UnPadding

type UnPadding func([]byte) ([]byte, error)

UnPadding 去除填充数据方法

  • Pkcs7UnPadding
  • ZeroUnPadding

type Unsigned

type Unsigned interface {
	~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
}

Unsigned 无符号整数

type WriteFile

type WriteFile struct {
	Lock sync.RWMutex
	File *os.File
}

WriteFile 文件读写操作

func NewWrite

func NewWrite(fileName string, isAppend bool, perm ...os.FileMode) (*WriteFile, error)

NewWrite 返回一个WriteFile实例

fileName 文件路径: 不存在则创建
isAppend 是否追加文件数据: true 每次写入数据在文件末尾追加数据; false 打开文件时会先清除数据;
prem 文件权限: 默认权限 文件夹0744, 文件0644

func (*WriteFile) Close

func (f *WriteFile) Close() error

Close 关闭文件

func (*WriteFile) Write

func (f *WriteFile) Write(data []byte) (int, error)

Write 写入数据

func (*WriteFile) WriteBuf

func (f *WriteFile) WriteBuf(handler func(write *bufio.Writer) (int, error)) (int, error)

WriteBuf 使用 bufio.Writer 写入数据

func (*WriteFile) WriteString

func (f *WriteFile) WriteString(data string) (int, error)

WriteString 写入数据

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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