Documentation
¶
Index ¶
- Constants
- Variables
- func Abs[T Integer](x T) T
- func Equal(a, b float64) bool
- func Filter[T any](slice []T, predicate func(T) bool) []T
- func FindIdx[T cmp.Ordered](aim []T, value T) int
- func Greater(a, b float64) bool
- func GreaterOrEqual(a, b float64) bool
- func RandInterval(b1, b2 int32) int32
- func RandIntervalN(b1, b2 int32, n uint32) []int32
- func SliceDiff[V cmp.Ordered](a, b []V) []V
- func Smaller(a, b float64) bool
- func SmallerOrEqual(a, b float64) bool
- func ToCamelCase(s string) string
- type AESCTRCrypter
- type AESGCMCrypter
- type Flag
- type ICrypter
- type ID
- type IDGenerator
- type Integer
- type Item
- type Items
- func ByFunc[K comparable, V any](m map[K]V, c Less[K, V]) Items[K, V]
- func ByKey[K Ordered, V any](m map[K]V) Items[K, V]
- func ByKeyDesc[K Ordered, V any](m map[K]V) Items[K, V]
- func ByValue[K comparable, V Ordered](m map[K]V) Items[K, V]
- func ByValueDesc[K comparable, V Ordered](m map[K]V) Items[K, V]
- type Less
- type Ordered
- type RSADecrypter
- type RSAEncrypter
- type TopN
Constants ¶
const ( // Epsilon 高精度浮点数比较阈值 // 值:0.00000001 (10^-8) // 适用场景:科学计算、高精度数值模拟 Epsilon = 0.00000001 // LowEpsilon 低精度浮点数比较阈值 // 值:0.01 (10^-2) // 适用场景:一般业务逻辑、游戏开发、UI布局计算 // 注意:本包所有比较函数默认使用此阈值 LowEpsilon = 0.01 )
Variables ¶
var ( // ErrInvalidPEMBlock PEM 格式解析失败 // 可能原因:文件不是 PEM 格式、文件损坏、格式错误 ErrInvalidPEMBlock = errors.New("invalid PEM block") // ErrInvalidPrivateKey 私钥类型不匹配 // 可能原因:非 RSA 私钥、密钥格式错误、密钥损坏 ErrInvalidPrivateKey = errors.New("invalid private key type") // ErrInvalidPublicKey 公钥类型不匹配 // 可能原因:非 RSA 公钥、密钥格式错误、密钥损坏 ErrInvalidPublicKey = errors.New("invalid public key type") // ErrInvalidAESKeyLength AES 密钥长度不符合规范 // 有效长度:16字节(AES-128)、24字节(AES-192)、32字节(AES-256) ErrInvalidAESKeyLength = errors.New("AES key length must be 16, 24, or 32 bytes") // ErrInvalidCiphertext 密文格式错误或数据损坏 // 可能原因:密文被截断、密文被篡改、密文格式不匹配 ErrInvalidCiphertext = errors.New("invalid ciphertext") )
加密操作相关错误定义
Functions ¶
func Abs ¶
func Abs[T Integer](x T) T
Abs 返回给定数字的绝对值 泛型函数,可用于任何满足Integer约束的类型 参数: x - 任意数值类型 返回: x的绝对值
func Equal ¶
Equal 判断两个浮点数是否近似相等
比较逻辑:|a - b| < LowEpsilon
参数:
a - 第一个浮点数 b - 第二个浮点数
返回值:
true - 两数之差的绝对值小于 LowEpsilon,视为相等 false - 两数差异超过阈值,视为不等
示例:
Equal(0.01, 0.02) // false,差值 0.01 等于阈值 Equal(1.001, 1.002) // true,差值 0.001 小于阈值 Equal(0.0, 0.009) // true,差值在误差范围内
func FindIdx ¶
FindIdx 在切片中搜索值并返回其索引 参数: aim - 要搜索的切片, value - 要查找的值 返回: 如果找到返回从0开始的索引,未找到返回-1 泛型函数,适用于任何有序类型(整数、浮点数、字符串等)
func Greater ¶
Greater 判断 a 是否明显大于 b
比较逻辑:a > b 且 (a - b) > LowEpsilon 注意:a 必须明显大于 b,不包括近似相等的情况
参数:
a - 第一个浮点数 b - 第二个浮点数
返回值:
true - a 明显大于 b(差值超过 LowEpsilon) false - a 小于等于 b,或者差值在误差范围内
示例:
Greater(1.02, 1.0) // true,差值 0.02 > LowEpsilon Greater(1.005, 1.0) // false,差值小于阈值
func GreaterOrEqual ¶
GreaterOrEqual 判断 a 是否大于等于 b
比较逻辑:a > b 或 |a - b| < LowEpsilon 注意:包括明显大于和近似相等两种情况
参数:
a - 第一个浮点数 b - 第二个浮点数
返回值:
true - a 大于 b 或两者近似相等 false - a 明显小于 b
示例:
GreaterOrEqual(1.02, 1.0) // true,大于 GreaterOrEqual(1.005, 1.0) // true,近似相等 GreaterOrEqual(0.98, 1.0) // false,明显小于
func RandInterval ¶
RandInterval 在[b1,b2]区间内生成一个随机整数 参数: b1 - 区间下界, b2 - 区间上界 返回: [b1,b2]区间内的随机int32值
func RandIntervalN ¶
RandIntervalN 在[b1, b2]区间内不重复地随机选择N个整数 使用Fisher-Yates洗牌算法的优化版本 参数: b1 - 区间下界, b2 - 区间上界, n - 要选择的数量 返回: 包含n个不重复随机数的切片
func Smaller ¶
Smaller 判断 a 是否明显小于 b
比较逻辑:a < b 且 (b - a) > LowEpsilon 注意:a 必须明显小于 b,不包括近似相等的情况
参数:
a - 第一个浮点数 b - 第二个浮点数
返回值:
true - a 明显小于 b(差值超过 LowEpsilon) false - a 大于等于 b,或者差值在误差范围内
示例:
Smaller(1.0, 1.02) // true,差值 0.02 > LowEpsilon Smaller(1.0, 1.005) // false,差值小于阈值
func SmallerOrEqual ¶
SmallerOrEqual 判断 a 是否小于等于 b
比较逻辑:a < b 或 |a - b| < LowEpsilon 注意:包括明显小于和近似相等两种情况
参数:
a - 第一个浮点数 b - 第二个浮点数
返回值:
true - a 小于 b 或两者近似相等 false - a 明显大于 b
示例:
SmallerOrEqual(1.0, 1.02) // true,小于 SmallerOrEqual(1.0, 1.005) // true,近似相等 SmallerOrEqual(1.02, 1.0) // false,明显大于
Types ¶
type AESCTRCrypter ¶
type AESCTRCrypter struct {
// contains filtered or unexported fields
}
AESCTRCrypter 实现CTR(Counter,计数器)模式的AES加密 注意: CTR模式不提供认证功能。如需认证加密,请使用AES-GCM CTR模式将块密码转换为流密码,适合加密任意长度的数据
func NewAESCTRCrypter ¶
func NewAESCTRCrypter(key []byte) (*AESCTRCrypter, error)
NewAESCTRCrypter 创建一个新的AES-CTR加密器实例 参数: key - AES密钥,长度必须是16、24或32字节 返回: AES-CTR加密器实例和可能的错误
type AESGCMCrypter ¶
type AESGCMCrypter struct {
// contains filtered or unexported fields
}
AESGCMCrypter 实现使用AES-GCM模式的认证加密 这是推荐的方法,因为它同时提供机密性和真实性保护 GCM模式会自动生成认证标签,防止密文被篡改
func NewAESGCMCrypter ¶
func NewAESGCMCrypter(key []byte) (*AESGCMCrypter, error)
NewAESGCMCrypter 创建一个新的AES-GCM加密器实例 参数: key - AES密钥,长度必须是16(AES-128)、24(AES-192)或32(AES-256)字节 返回: AES-GCM加密器实例和可能的错误
type Flag ¶
type Flag uint64
Flag 位标记管理器
基于 uint64 类型实现的高性能位标记系统,支持同时管理64个布尔标志。 使用位运算实现,性能优异,内存占用仅8字节。
设计特点:
- 内存高效:64个布尔标志仅占用8字节(相比64个bool节省56字节)
- 性能优异:所有操作都是O(1)时间复杂度的位运算
- 类型安全:通过 Flag 类型包装,避免直接操作整数
使用场景:
- 游戏中的角色状态管理(眩晕、无敌、沉默等)
- 权限系统的权限位管理
- 配置选项的开关组合
- 网络协议的标志位字段
示例用法:
const (
FlagRead Flag = 1 << 0 // 0x01
FlagWrite Flag = 1 << 1 // 0x02
FlagExec Flag = 1 << 2 // 0x04
)
var permissions Flag
permissions.Set(FlagRead | FlagWrite) // 设置读写权限
if permissions.Include(FlagWrite) { // 检查写权限
// 执行写操作
}
注意事项:
- 标志位定义建议使用 1 << n 的形式(n: 0-63)
- 避免使用0作为标志位,因为它在位运算中不起作用
- 标志位可以通过 | 运算符组合使用
func (*Flag) Clean ¶
Clean 清除指定的一个或多个标志位
操作:将指定标志位置为0,不影响其他位 位运算:flag = flag &^ f
参数:
f - 要清除的标志位,可以是单个标志或多个标志的组合
示例:
flags.Clean(Flag1) // 清除单个标志 flags.Clean(Flag1 | Flag2) // 同时清除多个标志
注意:
- 清除未设置的标志位是安全的,不会产生副作用
- 此方法会直接修改原 Flag 值
func (*Flag) Equal ¶
Equal 判断两个 Flag 是否完全相等
比较逻辑:逐位比较,所有64位都必须相同
参数:
s - 要比较的 Flag 值
返回值:
true - 两个 Flag 的所有标志位都相同 false - 至少有一个标志位不同
示例:
flags1 := Flag1 | Flag2 flags2 := Flag1 | Flag2 flags3 := Flag1 | Flag3 flags1.Equal(flags2) // true,完全相同 flags1.Equal(flags3) // false,Flag2 和 Flag3 不同
注意:
- 此方法进行的是精确比较,不是包含关系检查
- 如需检查包含关系,请使用 Include 或 IncludeAny 方法
func (*Flag) Exclude ¶
Exclude 返回移除指定标志位后的新值(不修改原值)
操作:生成一个新的 Flag,其中不包含指定的标志位 位运算:result = flag &^ s
参数:
s - 要排除的标志位
返回值:
排除指定标志位后的新 Flag 值
示例:
flags := Flag1 | Flag2 | Flag3 newFlags := flags.Exclude(Flag2) // newFlags = Flag1 | Flag3 // flags 保持不变,仍为 Flag1 | Flag2 | Flag3
注意:
- 此方法不会修改原 Flag 值,返回新值
- 排除未设置的标志位是安全的,返回值与原值相同
- 如需直接修改原值,请使用 Clean 方法
func (*Flag) Include ¶
Include 判断是否包含所有指定的标志位(AND 逻辑)
检查逻辑:exp 中的每一个标志位都必须在 flag 中被设置 位运算:(flag & exp) == exp
参数:
exp - 期望包含的标志位组合
返回值:
true - flag 包含 exp 中的所有标志位 false - flag 缺少 exp 中的至少一个标志位
示例:
flags := Flag1 | Flag2 | Flag3 flags.Include(Flag1) // true,包含 Flag1 flags.Include(Flag1 | Flag2) // true,包含 Flag1 和 Flag2 flags.Include(Flag1 | Flag4) // false,缺少 Flag4 flags.Include(0) // true,空集是任何集合的子集
应用场景:
- 权限检查:验证用户是否同时拥有多个权限
- 状态检查:验证对象是否同时处于多个状态
func (*Flag) IncludeAny ¶
IncludeAny 判断是否包含任意一个指定的标志位(OR 逻辑)
检查逻辑:exp 中只要有任意一个标志位在 flag 中被设置即可 位运算:(flag & exp) != 0
参数:
exp - 候选标志位组合
返回值:
true - flag 至少包含 exp 中的一个标志位 false - flag 不包含 exp 中的任何标志位
示例:
flags := Flag1 | Flag2 flags.IncludeAny(Flag1) // true,包含 Flag1 flags.IncludeAny(Flag3 | Flag4) // false,都不包含 flags.IncludeAny(Flag1 | Flag3) // true,包含 Flag1 flags.IncludeAny(0) // false,空集合
应用场景:
- 权限检查:验证用户是否拥有多个权限中的至少一个
- 状态检查:验证对象是否处于多个状态中的任意一个
type ICrypter ¶
type ICrypter interface {
// Encrypt 加密明文数据
//
// 参数:
// data - 待加密的明文字节数组
//
// 返回值:
// []byte - 加密后的密文字节数组
// error - 加密失败时的错误信息
//
// 注意:
// - RSA 加密有数据长度限制
// - AES 加密的密文长度会比明文长(包含 nonce/IV)
Encrypt(data []byte) ([]byte, error)
// Decrypt 解密密文数据
//
// 参数:
// data - 待解密的密文字节数组
//
// 返回值:
// []byte - 解密后的明文字节数组
// error - 解密失败时的错误信息(密钥错误、密文损坏等)
//
// 注意:
// - 必须使用对应的密钥和算法进行解密
// - AES-GCM 解密时会验证认证标签,失败则返回错误
Decrypt(data []byte) ([]byte, error)
}
ICrypter 定义加密器的统一接口
所有加密实现(RSA、AES-GCM、AES-CTR)都实现此接口, 提供统一的加密解密方法,便于算法切换和模块化设计。
实现类:
- RSAEncrypter / RSADecrypter:非对称加密
- AESGCMCrypter:认证加密(推荐)
- AESCTRCrypter:流式加密
使用模式:
var crypter ICrypter crypter = NewAESGCMCrypter(key) ciphertext, err := crypter.Encrypt(plaintext) plaintext, err := crypter.Decrypt(ciphertext)
type ID ¶
type ID int64
ID 表示一个唯一标识符,基于int64类型 提供了类型转换和提取时间戳/序列号组件的方法
func ParseString ¶
ParseString 将字符串表示转换为ID 参数: id - 十进制字符串形式的ID 返回: ID实例和可能的解析错误
type IDGenerator ¶
type IDGenerator struct {
// contains filtered or unexported fields
}
IDGenerator ID生成器的核心结构 维护序列计数器和最后时间戳以确保唯一性
func NewGenerator ¶
func NewGenerator() *IDGenerator
NewGenerator 创建并初始化一个新的ID生成器实例 将初始序列设置为1并记录当前时间戳
func (*IDGenerator) NextID ¶
func (s *IDGenerator) NextID() ID
NextID 生成下一个唯一ID 通过推进时间戳和重置序列来处理序列溢出 通过互斥锁确保线程安全
type Items ¶
Items map元素(键值对)的切片 提供用于处理已排序map结果的实用方法
func ByFunc ¶
func ByFunc[K comparable, V any](m map[K]V, c Less[K, V]) Items[K, V]
ByFunc 使用提供的比较函数对map进行排序 参数: m - 要排序的map, c - 比较函数 返回: 已排序的Items切片
func ByValue ¶
func ByValue[K comparable, V Ordered](m map[K]V) Items[K, V]
ByValue 按值升序对map排序 V必须是Ordered类型(支持比较)
func ByValueDesc ¶
func ByValueDesc[K comparable, V Ordered](m map[K]V) Items[K, V]
ByValueDesc 按值降序对map排序 V必须是Ordered类型(支持比较)
type RSADecrypter ¶
type RSADecrypter struct {
// contains filtered or unexported fields
}
RSADecrypter RSA 解密器
使用 RSA 私钥和 OAEP 填充方案解密数据。 采用 SHA-256 哈希函数,提供更高的安全性。
密钥格式支持:
- PKCS#8:推荐格式,跨语言兼容性好
- PKCS#1:传统格式,主要用于兼容旧系统
使用示例:
decrypter, err := NewRSADecrypter(privateKeyPEM)
if err != nil {
log.Fatal(err)
}
plaintext, err := decrypter.Decrypt(ciphertext)
func NewRSADecrypter ¶
func NewRSADecrypter(priKey []byte) (*RSADecrypter, error)
NewRSADecrypter 创建 RSA 解密器实例
自动识别并解析 PKCS#8 和 PKCS#1 两种密钥格式。 解析策略:优先尝试 PKCS#8,失败后回退到 PKCS#1。
参数:
priKey - PEM 格式的 RSA 私钥字节数组
返回值:
*RSADecrypter - RSA 解密器实例 error - 解析失败时返回错误
错误类型:
- ErrInvalidPEMBlock:PEM 格式解析失败
- ErrInvalidPrivateKey:密钥类型错误或格式不支持
PEM 格式示例:
-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIB... -----END PRIVATE KEY-----
注意事项:
- 私钥必须严格保密,泄露将导致安全风险
- 生产环境建议使用密钥管理服务(KMS)
- 密钥应使用强密码保护
func (*RSADecrypter) Decrypt ¶
func (d *RSADecrypter) Decrypt(encryptedData []byte) ([]byte, error)
Decrypt 使用 RSA 私钥解密数据
解密算法:RSA-OAEP with SHA-256 填充方案:OAEP(Optimal Asymmetric Encryption Padding) 哈希函数:SHA-256
参数:
encryptedData - RSA 加密的密文字节数组
返回值:
[]byte - 解密后的明文 error - 解密失败时返回错误
常见错误:
- "加密数据为空":输入数据长度为0
- "RSA解密失败":密钥不匹配、数据损坏、填充验证失败
性能考虑:
- RSA 解密是 CPU 密集型操作
- 2048位密钥的解密耗时约 1-2ms
- 不适合频繁解密或大数据解密
安全注意:
- 确保密文来源可信,防止选择密文攻击
- 失败时不要泄露具体错误信息给用户
type RSAEncrypter ¶
type RSAEncrypter struct {
// contains filtered or unexported fields
}
RSAEncrypter 实现基于OAEP填充的RSA加密 使用SHA-256作为哈希函数
func NewRSAEncrypter ¶
func NewRSAEncrypter(pubKey []byte) (*RSAEncrypter, error)
NewRSAEncrypter 创建一个新的RSA加密器实例 参数: pubKey - PEM格式的公钥字节数组(PKIX格式) 返回: RSA加密器实例和可能的错误
type TopN ¶
type TopN[T any] struct { // contains filtered or unexported fields }
TopN 维护前N个最大(或最小)元素 基于比较器保持元素有序,自动丢弃不符合条件的元素 泛型实现,可用于任何类型
func NewTopN ¶
NewTopN 创建一个新的TopN实例 参数:
n - 要维护的最大元素数量 comparer - 比较函数,如果a<b返回负数,a==b返回0,a>b返回正数
返回: TopN实例指针
func (*TopN[T]) GetAll ¶
func (t *TopN[T]) GetAll() []T
GetAll 返回当前存储的所有元素的副本 返回的切片是新副本,修改不会影响TopN集合
func (*TopN[T]) Put ¶
func (t *TopN[T]) Put(item T)
Put 将新元素插入TopN集合 元素将插入到正确的有序位置 如果集合已满且新元素不符合条件,将被丢弃