utils

package
v1.1.32 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2026 License: MIT Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TimeFmt  = "2006-01-02 15:04:05.000"
	TimeFmt2 = "2006-01-02 15:04:05.000000"
	DateFmt  = "2006-01-02"
	OneDay   = 86400000
	OneWeek  = OneDay * 7
	TwoWeek  = OneDay * 14
	OneMonth = OneDay * 30
)
View Source
const (
	MOBILE   = "^1[3456789]\\d{9}$"                                                                   // 手机号码
	INTEGER  = "^[\\-]?[1-9]+[0-9]*$|^[0]$"                                                           // 包含+-的自然数
	FLOAT    = "^[\\-]?[1-9]+[\\.][0-9]+$|^[\\-]?[0][\\.][0-9]+$"                                     // 包含+-的浮点数
	IPV4     = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$"           // IPV4地址
	EMAIL    = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"                                    // 邮箱地址
	ACCOUNT  = "^[a-zA-Z][a-zA-Z0-9_]{5,14}$"                                                         // 账号格式
	PASSWORD = "^.{6,18}$"                                                                            // 密码格式
	URL      = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$"                                   // URL格式
	IDNO     = "(^\\d{18}$)|(^\\d{15}$)"                                                              // 身份证格式
	PKNO     = "^1([3-9]{1})([0-9]{17})$"                                                             // 主键ID格式
	NUMBER   = "(^[1-9]([0-9]{0,29})$)|(^(0){1}$)"                                                    // 自然数
	NUMBER2  = "^[0-9]+$"                                                                             // 纯数字
	MONEY    = "(^[1-9]([0-9]{0,10})$)"                                                               // 自然数金额格式
	MONEY2   = "(^[1-9]([0-9]{0,12})?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\\.[0-9]([0-9])?$)"         // 包含+-自然数金额格式
	MONEY3   = "(^(-)?[1-9]([0-9]{0,12})?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^(-)?[0-9]\\.[0-9]([0-9])?$)" // 包含+-的浮点数金额格式
)
View Source
const ProtocolNonceBytes = 32

ProtocolNonceBytes HTTP/WebSocket/RPCX 协议随机数(n / Nonce)固定长度:32 字节。

Variables

View Source
var (
	CstSH, _ = time.LoadLocation("Asia/Shanghai") //上海

)
View Source
var (
	SPEL = regexp.MustCompile(`\$\{([^}]+)\}`)
)

Functions

func Add

func Add(a, b interface{}) (string, error)

func AddStr

func AddStr(input ...interface{}) string

高性能拼接字符串

func AddStrLen

func AddStrLen(length int, input ...interface{}) string

func AesCBCDecrypt

func AesCBCDecrypt(encryptedData string, key string) ([]byte, error)

AesCBCDecrypt 字符串版本的便捷方法

func AesCBCDecryptBase

func AesCBCDecryptBase(encryptedData string, key []byte) ([]byte, error)

AesCBCDecryptBase 使用指定IV的AES-CBC解密

func AesCBCEncrypt

func AesCBCEncrypt(plaintext []byte, key string) (string, error)

AesCBCEncrypt 字符串版本的便捷方法

func AesCBCEncryptBase

func AesCBCEncryptBase(plaintext, key []byte) (string, error)

AesCBCEncryptBase 标准AES-CBC加密,返回IV+密文的Base64编码

func AesCBCEncryptWithIV

func AesCBCEncryptWithIV(plaintext, key, iv []byte) (string, error)

AesCBCEncryptWithIV 使用指定IV的AES-CBC加密

func AesGCMDecrypt

func AesGCMDecrypt(encryptedData string, key string) ([]byte, error)

AesGCMDecrypt AES-GCM 解密(带认证验证)

func AesGCMDecryptBase

func AesGCMDecryptBase(encryptedData string, key, additionalData []byte) ([]byte, error)

AesGCMDecryptBase AES-GCM 解密基础方法 会自动验证: 1. 认证标签(AuthTag)- 确保密文未被篡改 2. 附加认证数据(AAD)- 确保关联数据未被篡改 任何一项验证失败都会返回错误,拒绝解密

func AesGCMDecryptBaseByteResult

func AesGCMDecryptBaseByteResult(encryptedData, key, additionalData []byte) ([]byte, error)

AesGCMDecryptBaseByteResult AES-GCM 解密基础方法 会自动验证: 1. 认证标签(AuthTag)- 确保密文未被篡改 2. 附加认证数据(AAD)- 确保关联数据未被篡改 任何一项验证失败都会返回错误,拒绝解密

func AesGCMDecryptWithAAD

func AesGCMDecryptWithAAD(encryptedData string, key, additionalData string) ([]byte, error)

AesGCMDecryptWithAAD AES-GCM 解密(带附加认证数据验证) additionalData: 必须与加密时使用的 AAD 完全一致

func AesGCMEncrypt

func AesGCMEncrypt(plaintext []byte, key string) (string, error)

AesGCMEncrypt AES-GCM 加密(带认证)- 推荐用于金融/银行级应用 相比 CBC 的优势: 1. 内置完整性保护(GMAC 认证标签) 2. 防止密文篡改攻击 3. 无需 PKCS7 Padding(支持任意长度) 4. 并行加密(性能提升 2-5 倍) 5. TLS 1.3 强制使用 6. NIST/PCI DSS 优先推荐

func AesGCMEncryptBase

func AesGCMEncryptBase(plaintext, key, additionalData []byte) (string, error)

AesGCMEncryptBase AES-GCM 加密基础方法 返回格式:Base64(Nonce + Ciphertext + AuthTag) Nonce: 12 字节(GCM 标准) AuthTag: 16 字节(128-bit 认证标签)

func AesGCMEncryptBaseByteResult

func AesGCMEncryptBaseByteResult(plaintext, key, additionalData []byte) ([]byte, error)

AesGCMEncryptBaseByteResult AES-GCM 加密基础方法 返回格式:Byte(Nonce + Ciphertext + AuthTag) Nonce: 12 字节(GCM 标准) AuthTag: 16 字节(128-bit 认证标签)

func AesGCMEncryptWithAAD

func AesGCMEncryptWithAAD(plaintext []byte, key, additionalData string) (string, error)

AesGCMEncryptWithAAD AES-GCM 加密(带附加认证数据) additionalData: 不加密但需要认证的数据(如请求头、用户ID等) 使用场景:确保关联数据(如交易ID、用户ID)未被篡改

func AnyToStr

func AnyToStr(any interface{}) string

基础类型 int uint float string bool 复杂类型 json

func Base64Decode

func Base64Decode(input interface{}) []byte

default base64 - 逆向

func Base64DecodeWithPool

func Base64DecodeWithPool(input interface{}) []byte

Base64DecodeWithPool 使用缓冲池进行Base64解码的便捷函数

func Base64Encode

func Base64Encode(input interface{}) string

default base64 - 正向

func Base64EncodeWithPool

func Base64EncodeWithPool(input interface{}) string

Base64EncodeWithPool 使用缓冲池进行Base64编码的便捷函数

func Bytes2Str

func Bytes2Str(b []byte) string

Bytes2Str 零拷贝转换 []byte 为 string

⚠️ 重要警告:返回的 string 与原始 []byte 共享内存

使用场景:

  • SQL 驱动返回的 []byte(不会被修改)
  • 网络协议解析的 []byte(不会被修改)
  • 任何不会被修改的 []byte

性能:

  • 0.10 ns/op(比 string(b) 快 200x)
  • 0 B/op 零内存分配

注意:

  • 不要修改原始 []byte,否则会破坏 string 的不可变性
  • 此转换对任何 len/cap 组合都是正确的(总是读取 len 字段)
  • 此实现依赖 Go 内部 slice/string 内存布局,未来 Go 版本可能失效

示例:

b := []byte("hello")
s := Bytes2Str(b)
fmt.Println(s)  // ✅ 安全:只读访问
b[0] = 'H'      // ⚠️ 危险!会修改 s 的内容

func CheckInt

func CheckInt(c int, vs ...int) bool

检测int数值是否在区间

func CheckInt32

func CheckInt32(c int32, vs ...int32) bool

检测int32数值是否在区间

func CheckInt64

func CheckInt64(c int64, vs ...int64) bool

检测int64数值是否在区间

func CheckLen

func CheckLen(o interface{}, min, max int) bool

获取并校验字符串长度

func CheckRangeInt

func CheckRangeInt(c, min, max int) bool

检测int数值是否在区间

func CheckRangeInt64

func CheckRangeInt64(c, min, max int64) bool

检测int64数值是否在区间

func CheckStr

func CheckStr(c string, vs ...string) bool

检测string数值是否在区间

func CheckStrLen

func CheckStrLen(str string, min, max int) bool

获取并校验字符串长度

func ClientIP

func ClientIP(req *http.Request) string

RemoteIp 返回远程客户端的 IP,如 192.168.1.1

func Cmp

func Cmp(a, b interface{}) int

a>b=1 a=b=0 a<b=-1

func CompareBase64Sign

func CompareBase64Sign(sign []byte, target string) bool

func CompareSign

func CompareSign(sign, target []byte) bool

CompareSign 防止时序攻击, sign=自身有效签名 target=外部不可信签名

func Div

func Div(a, b interface{}, n int32) (string, error)

func Error

func Error(input ...interface{}) error

高性能拼接错误对象

func FNV1a64

func FNV1a64(s string) string

FNV1a64 快速哈希函数(非密码学安全,适合缓存键生成)

func FNV1a64Base

func FNV1a64Base(b []byte) string

FNV1a64Base 快速哈希函数(非密码学安全,适合缓存键生成)

func Float64ToArgs

func Float64ToArgs(data []float64) []interface{}

func Float64ToInt64

func Float64ToInt64(f float64) int64

float64转int64

func FmtDiv

func FmtDiv(v string, d int64) string

func FmtEL

func FmtEL(msg string, values ...interface{}) (string, error)

func FmtZero

func FmtZero(r string) string

func GetAesIVSecure

func GetAesIVSecure() []byte

GetAesIVSecure 使用加密安全的随机数生成器生成IV(推荐)

func GetAesKeySecure

func GetAesKeySecure(key string) []byte

GetAesKeySecure 安全的AES密钥生成(推荐使用)

func GetAnyDayFirstAndLast

func GetAnyDayFirstAndLast(x int64) (int64, int64)

获取x天开始和结束时间,最多30天

func GetAnyMonthFirstAndLast

func GetAnyMonthFirstAndLast(month int) (int64, int64)

获取指定月份开始和结束时间

func GetDayFirstAndLast

func GetDayFirstAndLast() (int64, int64)

获取当天开始和结束时间

func GetFmtDate

func GetFmtDate(t int64) int64

获取时间的0点

func GetInDayFirstAndLast

func GetInDayFirstAndLast(x int64) (int64, int64)

获取x天开始和当天结束时间,最多30天

func GetJsonBool

func GetJsonBool(b []byte, k string) bool

func GetJsonBytes

func GetJsonBytes(b []byte, k string) []byte

func GetJsonFloat64

func GetJsonFloat64(b []byte, k string) float64

func GetJsonInt

func GetJsonInt(b []byte, k string) int

func GetJsonInt64

func GetJsonInt64(b []byte, k string) int64

func GetJsonObjectBytes

func GetJsonObjectBytes(b []byte, k string) []byte

func GetJsonObjectString

func GetJsonObjectString(b []byte, k string) string

func GetJsonObjectValue

func GetJsonObjectValue(b []byte) *fastjson.Value

GetJsonObjectValue 例如: v.Get("a").Get("b").MarshalTo(nil)

func GetJsonString

func GetJsonString(b []byte, k string) string

func GetLocalDynamicSecretKey

func GetLocalDynamicSecretKey() string

func GetLocalIP

func GetLocalIP() string

获取本机内网IP

func GetMonthFirstAndLast

func GetMonthFirstAndLast() (int64, int64)

获取当前月份开始和结束时间

func GetPath

func GetPath() string

获取项目绝对路径

func GetRandomSecure

func GetRandomSecure(l int) []byte

GetRandomSecure 从 crypto/rand 读取 l 字节。失败时 panic:视为系统级故障, 继续用弱随机源(尤其作 AES-GCM nonce)会破坏安全假设。

func GetSnowflakeNode

func GetSnowflakeNode(n int64) *snowflake.Node

func GetUUID

func GetUUID(noHyphens bool) string

func GetWeekFirstAndLast

func GetWeekFirstAndLast() (int64, int64)

获取当前星期开始和结束时间

func HMAC_MD5

func HMAC_MD5(data, key string, useBase64 ...bool) string

HMAC-MD5加密

func HMAC_MD5_BASE

func HMAC_MD5_BASE(data, key []byte) []byte

HMAC_MD5_BASE 返回原始字节数组的HMAC-MD5

func HMAC_SHA1

func HMAC_SHA1(data, key string, useBase64 ...bool) string

HMAC-SHA1加密

func HMAC_SHA1_BASE

func HMAC_SHA1_BASE(data, key []byte) []byte

HMAC_SHA1_BASE 返回原始字节数组的HMAC-SHA1

func HMAC_SHA256

func HMAC_SHA256(data, key string, useBase64 ...bool) string

HMAC-SHA256加密

func HMAC_SHA256_BASE

func HMAC_SHA256_BASE(data, key []byte) []byte

HMAC_SHA256_BASE 返回原始字节数组的HMAC-SHA256

func HMAC_SHA512

func HMAC_SHA512(data, key string, useBase64 ...bool) string

func HMAC_SHA512_BASE

func HMAC_SHA512_BASE(data, key []byte) []byte

func HasStr

func HasStr(s1 string, s2 string) bool

判定指定字符串是否存在于原字符串

func InArray

func InArray(p interface{}) []interface{}

func Int2Time

func Int2Time(t int64) time.Time

时间戳转time

func Int64ToArgs

func Int64ToArgs(data []int64) []interface{}

func IsAccount

func IsAccount(s string) bool

func IsEmail

func IsEmail(s string) bool

func IsFloat

func IsFloat(s string) bool

func IsIDNO

func IsIDNO(s string) bool

func IsIPV4

func IsIPV4(s string) bool

func IsInt

func IsInt(s string) bool

func IsMobil

func IsMobil(s string) bool

func IsMoney

func IsMoney(s string) bool

分格式

func IsMoney2

func IsMoney2(s string) bool

常规浮点格式

func IsMoney3

func IsMoney3(s string) bool

func IsNumber

func IsNumber(s string) bool

func IsNumber2

func IsNumber2(s string) bool

func IsPKNO

func IsPKNO(s interface{}) bool

func IsPassword

func IsPassword(s string) bool

func IsURL

func IsURL(s string) bool

func JsonMarshal

func JsonMarshal(v interface{}) ([]byte, error)

对象转JSON字符串

func JsonToAny

func JsonToAny(src interface{}, target interface{}) error

对象转对象

func JsonUnmarshal

func JsonUnmarshal(data []byte, v interface{}) error

JSON字符串转对象

func JsonUnmarshalFast

func JsonUnmarshalFast(data []byte, v interface{}) error

JsonUnmarshalFast 单遍 JSON 反序列化(跳过 JsonValid 预校验)。 适用于高频热路径:直接反序列化,失败时由反序列化错误返回。

func JsonUnmarshalUseNumber

func JsonUnmarshalUseNumber(data []byte, v interface{}) error

JsonUnmarshalUseNumber 反序列化 JSON;数字保留为 json.Number,避免雪花 ID 经 float64 丢精度。 适用于 audit 脱敏等解析到 interface{} / map[string]interface{} 后再 Marshal 的场景。

func JsonUnmarshalUseNumberFast

func JsonUnmarshalUseNumberFast(data []byte, v interface{}) error

JsonUnmarshalUseNumberFast 单遍反序列化(跳过 JsonValid),UseNumber 保留大整数精度。

func JsonValid

func JsonValid(b []byte) bool

校验JSON格式是否合法

func JsonValidString

func JsonValidString(s string) bool

校验JSON格式是否合法

func Len

func Len(o interface{}) int

获取混合字符串实际长度

func LinuxOS

func LinuxOS() bool

func LoadYamlConfigFromPath

func LoadYamlConfigFromPath(path string) (*DIC.YamlConfig, error)

LoadYamlConfigFromPath 从指定路径读取配置文件

func LowerFirst

func LowerFirst(str string) string

65-96大写字母 97-122小写字母

func MD5

func MD5(s string, useBase64 ...bool) string

MD5加密

func MD5_BASE

func MD5_BASE(s []byte) []byte

MD5哈希

func MacOS

func MacOS() bool

func MatchFilterURL

func MatchFilterURL(requestPath string, matchPattern []string) bool

func MathAbs

func MathAbs(n int64) int64

func ModRand

func ModRand(n int) int

ModRand 调用底层生成随机数,进行取模运算,性能提升10倍

func Mul

func Mul(a, b interface{}) (string, error)

func NewPasswordBase

func NewPasswordBase(pwd, salt []byte, iter int) []byte

func NextIID

func NextIID() int64

NextIID 获取雪花int64 ID,默认为1024区

func NextIIDByNode

func NextIIDByNode(node int64) int64

NextIIDByNode 获取指定node的雪花int64 ID 适用于多进程/多服务并发写同库时通过区分node降低主键冲突风险。

func NextSID

func NextSID() string

NextSID 获取雪花string ID,默认为1024区

func NextSIDByNode

func NextSIDByNode(node int64) string

NextSIDByNode 获取指定node的雪花string ID

func PKCS7Padding

func PKCS7Padding(ciphertext []byte, blockSize int) []byte

func PKCS7UnPadding

func PKCS7UnPadding(plantText []byte, blockSize int) []byte

func ParseJsonBase64

func ParseJsonBase64(input interface{}, ouput interface{}) error

func RandInt

func RandInt(n int) string

func RandNonce

func RandNonce() string

func RandProtocolNonce

func RandProtocolNonce() string

RandProtocolNonce 生成协议用 Nonce:Base64(32 字节 CSPRNG)。

func RandStr

func RandStr(n int, b ...bool) string

func ReadFile

func ReadFile(path string) ([]byte, error)

读取文件

func ReadJsonConfig

func ReadJsonConfig(conf []byte, result interface{}) error

读取JSON格式配置文件

func ReadLocalJsonConfig

func ReadLocalJsonConfig(path string, result interface{}) error

读取本地JSON配置文件

func ReadLocalYamlConfig

func ReadLocalYamlConfig(path string, result interface{}) error

读取本地YAML配置文件

func Reverse

func Reverse(s string) string

func ReverseBase64

func ReverseBase64(s string) string

func ReverseStr

func ReverseStr(s string, x ...int) string

func SHA1

func SHA1(s string, useBase64 ...bool) string

SHA1哈希

func SHA1_BASE

func SHA1_BASE(s []byte) []byte

SHA1哈希

func SHA256

func SHA256(s string, useBase64 ...bool) string

SHA256哈希

func SHA256_BASE

func SHA256_BASE(s []byte) []byte

SHA256哈希

func SHA512

func SHA512(s string, useBase64 ...bool) string

func SHA512_BASE

func SHA512_BASE(s []byte) []byte

SHA512哈希

func SetDynamicSecretKey

func SetDynamicSecretKey(key string)

func Shift

func Shift(input interface{}, ln int, fz bool) string

保留小数位

func ShiftN

func ShiftN(a interface{}, n int32) (string, error)

func StartWait

func StartWait(msg string)

无限等待

func Str2Bytes

func Str2Bytes(s string) []byte

Str2Bytes 零拷贝转换 string 为 []byte

⚠️ 重要警告:返回的 []byte 与原始 string 共享内存

使用场景:

  • 只读访问(哈希计算、HMAC、加密等)
  • 临时传参(不会被修改的场景)
  • 性能关键路径(高频调用)

性能:

  • 0.10 ns/op(比 []byte(s) 快 200x)
  • 0 B/op 零内存分配

注意:

  • string 在 Go 中是不可变的(immutable),底层数据存储在只读内存段
  • 尝试修改返回的 []byte 会触发运行时 panic(写入只读内存)
  • 返回的 []byte 保证 len == cap
  • 此实现依赖 Go 内部 string/slice 内存布局,未来版本可能失效

示例:

s := "hello"
b := Str2Bytes(s)
hash := md5.Sum(b)  // ✅ 安全:只读访问
b[0] = 'H'          // ⚠️ 运行时 panic:尝试写入只读内存

func Str2Date

func Str2Date(s string) (int64, error)

格式字符串转时间戳/毫秒

func Str2FormatTime

func Str2FormatTime(s string, fmt string, local *time.Location) (int64, error)

格式字符串转时间戳/毫秒

func Str2Time

func Str2Time(s string) (int64, error)

格式字符串转时间戳/毫秒 2023-07-22 08:47:27.379 2023-07-22 08:47:27 2023-07-22

func StrToBool

func StrToBool(str string) (bool, error)

string to bool

func StrToFloat

func StrToFloat(str string) (float64, error)

转换成小数

func StrToInt

func StrToInt(str string) (int, error)

string to int

func StrToInt8

func StrToInt8(str string) (int8, error)

string to int8

func StrToInt16

func StrToInt16(str string) (int16, error)

string to int16

func StrToInt32

func StrToInt32(str string) (int32, error)

string to int32

func StrToInt64

func StrToInt64(str string) (int64, error)

string to int64

func StringToArgs

func StringToArgs(data []string) []interface{}

func Sub

func Sub(a, b interface{}) (string, error)

func Substr

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

截取字符串 start 起点下标 end 结束下标

func Time2DateStr

func Time2DateStr(t int64) string

时间戳转格式字符串/毫秒

func Time2FormatStr

func Time2FormatStr(t int64, fmt string, local *time.Location) string

时间戳转格式字符串/毫秒

func Time2Str

func Time2Str(t int64) string

时间戳转格式字符串/毫秒, 例: 2023-07-22 08:47:27.379

func ToJsonBase64

func ToJsonBase64(input interface{}) (string, error)

func UnixMilli

func UnixMilli() int64

获取当前时间/毫秒

func UnixNano

func UnixNano() int64

UnixNano 直接调用底层方法比time.Now()性能提升1倍

func UnixSecond

func UnixSecond() int64

获取当前时间/秒

func UpperFirst

func UpperFirst(str string) string

65-96大写字母 97-122小写字母

func ValidPattern

func ValidPattern(content, pattern string) bool

func ValidProtocolNonce

func ValidProtocolNonce(nonce string) bool

ValidProtocolNonce 校验 Nonce 为 Base64 编码且解码后恰好 32 字节。

func ValidProtocolNonceBytes

func ValidProtocolNonceBytes(n []byte) bool

ValidProtocolNonceBytes 校验原始字节 Nonce(如 RPCX CommonRequest.n)。

func WindowsOS

func WindowsOS() bool

Types

type Base64Pool

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

Base64Pool Base64编解码缓冲池

func GetBase64Pool

func GetBase64Pool() *Base64Pool

GetBase64Pool 获取全局Base64池子实例

func (*Base64Pool) Decode

func (p *Base64Pool) Decode(input interface{}) []byte

Decode 使用缓冲池进行Base64解码

func (*Base64Pool) Encode

func (p *Base64Pool) Encode(input interface{}) string

Encode 使用缓冲池进行Base64编码

Jump to

Keyboard shortcuts

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