u2

package
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2025 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Package u2 提供AES加密解密功能,支持ECB和CBC模式,以及PKCS5/PKCS7填充

Package u2 提供并发控制相关功能,支持QPS限制、最大执行时间等控制。

该包主要用于控制并发任务的执行频率,防止系统过载。主要功能包括: - QPS(每秒查询数)限制 - 最大执行时间控制 - 并发任务管理

Package u2 提供通用工具函数集合,包括加密、并发控制等功能。

Index

Constants

This section is empty.

Variables

View Source
var TimeLayout string = "2006-01-02 15:04:05"

Functions

func AesDecryptCBC

func AesDecryptCBC(s string, key string, vi string) (string, error)

AesDecryptCBC 使用AES-CBC模式解密数据,默认使用PKCS7填充

参数:

  • s: 需要解密的Base64编码字符串
  • key: 解密密钥
  • vi: 初始化向量

返回值:

  • string: 解密后的原始字符串
  • error: 解密过程中发生的错误

func AesDecryptCBCWithPadding added in v0.0.2

func AesDecryptCBCWithPadding(s string, key string, vi string, paddingType PaddingType) (string, error)

AesDecryptCBCWithPadding 使用AES-CBC模式解密数据,并支持选择填充方式

参数:

  • s: 需要解密的Base64编码字符串
  • key: 解密密钥
  • vi: 初始化向量
  • paddingType: 填充类型(PKCS5或PKCS7)

返回值:

  • string: 解密后的原始字符串
  • error: 解密过程中发生的错误

func AesDecryptECB added in v0.0.2

func AesDecryptECB(s string, key string) (string, error)

AesDecryptECB 使用AES-ECB模式解密数据,默认使用PKCS7填充

参数:

  • s: 需要解密的Base64编码字符串
  • key: 解密密钥

返回值:

  • string: 解密后的原始字符串
  • error: 解密过程中发生的错误

func AesDecryptECBWithPadding added in v0.0.2

func AesDecryptECBWithPadding(s string, key string, paddingType PaddingType) (string, error)

AesDecryptECBWithPadding 使用AES-ECB模式解密数据,并支持选择填充方式

参数:

  • s: 需要解密的Base64编码字符串
  • key: 解密密钥
  • paddingType: 填充类型(PKCS5或PKCS7)

返回值:

  • string: 解密后的原始字符串
  • error: 解密过程中发生的错误

func AesEncryptCBC

func AesEncryptCBC(s string, key string, vi string) (string, error)

AesEncryptCBC 使用AES-CBC模式加密数据,默认使用PKCS7填充

参数:

  • s: 需要加密的字符串
  • key: 加密密钥
  • vi: 初始化向量

返回值:

  • string: 加密后的Base64编码字符串
  • error: 加密过程中发生的错误

func AesEncryptCBCWithPadding added in v0.0.2

func AesEncryptCBCWithPadding(s string, key string, vi string, paddingType PaddingType) (string, error)

AesEncryptCBCWithPadding 使用AES-CBC模式加密数据,并支持选择填充方式

参数:

  • s: 需要加密的字符串
  • key: 加密密钥
  • vi: 初始化向量
  • paddingType: 填充类型(PKCS5或PKCS7)

返回值:

  • string: 加密后的Base64编码字符串
  • error: 加密过程中发生的错误

func AesEncryptECB added in v0.0.2

func AesEncryptECB(s string, key string) (string, error)

AesEncryptECB 使用AES-ECB模式加密数据,默认使用PKCS7填充

参数:

  • s: 需要加密的字符串
  • key: 加密密钥

返回值:

  • string: 加密后的Base64编码字符串
  • error: 加密过程中发生的错误

func AesEncryptECBWithPadding added in v0.0.2

func AesEncryptECBWithPadding(s string, key string, paddingType PaddingType) (string, error)

AesEncryptECBWithPadding 使用AES-ECB模式加密数据,并支持选择填充方式

参数:

  • s: 需要加密的字符串
  • key: 加密密钥
  • paddingType: 填充类型(PKCS5或PKCS7)

返回值:

  • string: 加密后的Base64编码字符串
  • error: 加密过程中发生的错误

func AppendFile

func AppendFile(filename, content string) error

AppendFile 追加内容到指定文件,自动管理文件句柄

参数:

  • filename: 目标文件名
  • content: 要追加的内容

返回值:

  • error: 操作过程中发生的错误

注意:

文件句柄会在1秒不活动后自动关闭,如果写入失败会重试3次

func AppendFileOnce

func AppendFileOnce(filename, content string)

AppendFileOnce 一次性追加内容到文件,不保持文件句柄

参数:

  • filename: 目标文件名
  • content: 要追加的内容

func AppendFileWithTimes added in v0.0.2

func AppendFileWithTimes(filename, content string, times int) error

AppendFileWithTimes 带重试机制的追加文件操作

参数:

  • filename: 目标文件名
  • content: 要追加的内容
  • times: 最大重试次数

返回值:

  • error: 操作过程中发生的错误

func B2I

func B2I(b []byte, i interface{}) error

B2I 将JSON字节转换为接口

参数:

b - 要转换的JSON字节数组
i - 目标接口指针

返回值:

error - 转换过程中可能发生的错误

注意:

该函数是Json2Interface的别名,提供更直观的函数命名

示例:

var result map[string]interface{}
err := B2I([]byte(`{"key":"value"}`), &result)

func Base64Decode

func Base64Decode(s string, gzipForm bool) (string, error)

Base64Decode 对Base64编码的字符串进行解码,可选择是否进行GZIP解压缩

参数:

  • s: 需要解码的Base64字符串
  • gzipForm: 是否启用GZIP解压缩

返回值:

  • string: 解码后的原始字符串
  • error: 解码过程中发生的错误

func Base64Encode

func Base64Encode(s string, gzipForm bool) (string, error)

Base64Encode 对字符串进行Base64编码,可选择是否进行GZIP压缩

参数:

  • s: 需要编码的原始字符串
  • gzipForm: 是否启用GZIP压缩

返回值:

  • string: 编码后的Base64字符串
  • error: 编码过程中发生的错误

func CloseAllFiles

func CloseAllFiles()

CloseAllFiles 关闭所有打开的文件句柄

注意:

通常在程序退出时调用,确保所有文件资源被正确释放

func DeepEqual

func DeepEqual(left, right interface{}) bool

DeepEqual 深度比较两个对象是否相等 DeepEqual 深度比较两个值的相等性 使用reflect.DeepEqual实现,处理各种嵌套类型的比较 参数:

left - 要比较的第一个值
right - 要比较的第二个值

返回值:

bool - 是否深度相等

func ExistFile

func ExistFile(filename string) bool

ExistFile 检查文件是否存在

参数:

  • filename: 要检查的文件名

返回值:

  • bool: 文件存在返回true,否则返回false

func ForSlice

func ForSlice(list interface{}, runningNum int, f func(int, interface{}) bool) bool

ForSlice 并发处理切片。

参数:

  • list: 要处理的切片
  • runningNum: 最大并发数
  • f: 处理函数,返回false表示停止处理

返回值:

  • bool: 是否成功完成所有处理

func ForSliceWithQPS added in v0.0.2

func ForSliceWithQPS(list interface{}, runningNum int, Max_QPS int, f func(int, interface{}) bool) bool

ForSliceWithQPS 带QPS限制的并发处理。

参数:

  • list: 要处理的切片
  • runningNum: 最大并发数
  • Max_QPS: 最大QPS限制
  • f: 处理函数,返回false表示停止处理

返回值:

  • bool: 是否成功完成所有处理

func ForWithNum

func ForWithNum(startNum, endNum, runningNum int, f func(int) bool) bool

ForWithNum 并发处理数字范围。

参数:

  • startNum: 起始数字
  • endNum: 结束数字
  • runningNum: 最大并发数
  • f: 处理函数,返回false表示停止处理

返回值:

  • bool: 是否成功完成所有处理

func ForWithNumAndQPS added in v0.0.2

func ForWithNumAndQPS(startNum, endNum, runningNum, Max_QPS int, f func(int) bool) bool

ForWithNumAndQPS 并发处理数字范围,带QPS限制。

参数:

  • startNum: 起始数字
  • endNum: 结束数字
  • runningNum: 最大并发数
  • Max_QPS: 最大QPS限制
  • f: 处理函数,返回false表示停止处理

返回值:

  • bool: 是否成功完成所有处理

func GetNoRepeatList

func GetNoRepeatList(list []string, removeEmpty bool) []string

GetNoRepeatList 获取去重后的字符串切片

参数:

list - 要处理的字符串切片
removeEmpty - 是否移除空字符串

返回值:

[]string - 去重后的字符串切片

注意:

  1. 使用map实现去重,不保证顺序
  2. 当removeEmpty为true时,会移除所有空字符串

示例:

list := []string{"apple", "banana", "apple", "", "Banana"}
result := GetNoRepeatList(list, true) // 返回["apple", "banana", "Banana"]

func HmacSha256

func HmacSha256(data string, secret string) (string, error)

HmacSha256 使用HMAC-SHA256算法对数据进行加密。

参数:

  • data: 要加密的原始数据字符串
  • secret: 用于加密的密钥字符串

返回值:

  • string: 加密后的十六进制字符串
  • error: 如果加密过程中发生错误,则返回错误信息

示例:

result, err := HmacSha256("my data", "my secret")
if err != nil {
    log.Fatal(err)
}
fmt.Println(result)

func HtmlDecode added in v0.0.2

func HtmlDecode(input string) string

HtmlDecode 将包含HTML实体的字符串转换为普通字符串。

参数:

input - 包含HTML实体的字符串

返回值:

转换后的普通字符串

示例:

decoded := HtmlDecode("&lt;div&gt;") // 返回 "<div>"

func HtmlEncode added in v0.0.2

func HtmlEncode(input string) string

HtmlEncode 将普通字符串转换为包含HTML实体的字符串。

参数:

input - 需要编码的普通字符串

返回值:

包含HTML实体的字符串

示例:

encoded := HtmlEncode("<div>") // 返回 "&lt;div&gt;"

func I2S

func I2S(i interface{}) string

I2S 将接口转换为JSON字符串

参数:

i - 要转换的接口

返回值:

string - 转换后的JSON字符串

注意:

该函数是Struct2JsonNoError的快捷方式,默认不格式化输出

示例:

data := map[string]interface{}{"key": "value"}
jsonStr := I2S(data)

func Interface2InterfaceSlice added in v0.0.2

func Interface2InterfaceSlice(slice interface{}) []interface{}

Interface2InterfaceSlice 将任意类型的切片转换为[]interface{}类型

参数:

slice - 要转换的任意类型切片

返回值:

[]interface{} - 转换后的切片

注意:

如果输入不是切片类型,返回空切片

示例:

intSlice := []int{1, 2, 3}
result := Interface2InterfaceSlice(intSlice) // 返回[]interface{}{1, 2, 3}

func Json2Interface

func Json2Interface(b []byte, i interface{}) error

Json2Interface 将JSON字节反序列化为接口

参数:

b - 要反序列化的JSON字节数组
i - 目标接口指针

返回值:

error - 反序列化过程中可能发生的错误

示例:

var user User
err := Json2Interface([]byte(`{"name":"Bob"}`), &user)

func JsonPretty

func JsonPretty(content string) string

JsonPretty 格式化JSON字符串

参数:

content - 要格式化的JSON字符串

返回值:

格式化后的JSON字符串

示例:

pretty := JsonPretty(`{"name":"John"}`) // 返回格式化后的JSON

func JsonPretty4Byte

func JsonPretty4Byte(content []byte) string

JsonPretty4Byte 格式化JSON字节数组

参数:

content - 要格式化的JSON字节数组

返回值:

格式化后的JSON字符串

示例:

pretty := JsonPretty4Byte([]byte(`{"name":"John"}`)) // 返回格式化后的JSON

func LoadJson

func LoadJson(path string, dist interface{}) error

LoadJson 从文件加载JSON数据 参数:

path - 文件路径
dist - 目标结构体指针

返回值:

error - 加载过程中发生的错误

func Md5

func Md5(s string) string

Md5 计算字符串的32位小写MD5哈希值

参数:

s - 要计算哈希的字符串

返回值:

32位小写MD5字符串

示例:

hash := Md5("hello") // 返回 "5d41402abc4b2a76b9719d911017c592"

func Md5_16

func Md5_16(s string) string

Md5_16 计算字符串的16位小写MD5哈希值

参数:

s - 要计算哈希的字符串

返回值:

16位小写MD5字符串

示例:

hash := Md5_16("hello") // 返回 "c4b2a76b9719d911"

func NewError

func NewError(key string, val ...string) error

NewError 创建一个自定义错误对象

该函数用于生成包含详细信息的错误对象,格式为: "<key>异常,具体值:<val1>,<val2>,..."

参数:

  • key: 错误类型或错误描述的关键字
  • val: 可选的错误详细信息,可以传入多个值

返回值:

  • error: 包含格式化错误信息的error对象

示例:

err := NewError("文件读取", "file.txt", "权限不足")
// 输出: "文件读取异常,具体值:file.txt,权限不足"

func NewHmacSha256 added in v0.0.2

func NewHmacSha256(secret string) hash.Hash

NewHmacSha256 创建一个新的HMAC-SHA256实例。

参数:

  • secret: 用于加密的密钥字符串

返回值:

  • hash.Hash: HMAC-SHA256实例

func Open

func Open(link string)

Open 在默认应用程序中打开指定的链接或文件夹

参数:

link - 要打开的URL或文件路径。可以是:
       - 网页地址(如 "https://example.com")
       - 本地文件路径(如 "/path/to/file")
       - 文件夹路径(如 "/path/to/folder")

注意:

  1. 该函数目前仅支持Linux和macOS系统
  2. 在Linux系统上使用xdg-open命令
  3. 在macOS系统上使用open命令
  4. 在其他操作系统上会记录不支持的信息

示例:

Open("https://example.com")  // 在默认浏览器中打开网页
Open("/path/to/file.txt")    // 用默认应用程序打开文件
Open("/path/to/folder")      // 在文件管理器中打开文件夹

func RandSeq

func RandSeq(n int) string

RandSeq 生成指定长度的随机字符串,包含数字和大小写字母

参数:

n - 要生成的字符串长度

返回值:

string - 生成的随机字符串

注意:

  1. 使用math/rand包生成随机数,需确保已调用rand.Seed()
  2. 生成的字符串包含以下字符集: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

示例:

rand.Seed(time.Now().UnixNano())
randomStr := RandSeq(10) // 生成10位随机字符串

func ReadFile

func ReadFile(filename string) []byte

ReadFile 读取整个文件内容

参数:

  • filename: 要读取的文件名

返回值:

  • []byte: 文件内容,如果读取失败返回nil

func ReadFileLine

func ReadFileLine(filename string, callback func(line string))

ReadFileLine 逐行读取文件内容,调用回调函数处理每一行

参数:

  • filename: 要读取的文件名
  • callback: 处理每一行的回调函数

func ReadFileStringSlice

func ReadFileStringSlice(filename string, seq string) []string

ReadFileStringSlice 将文件内容按指定分隔符分割成字符串切片

参数:

  • filename: 要读取的文件名
  • seq: 分隔符,默认为换行符

返回值:

  • []string: 分割后的字符串切片

func RemoveFile

func RemoveFile(filename string) error

RemoveFile 如果文件存在则删除

参数:

  • filename: 要删除的文件名

返回值:

  • error: 操作过程中发生的错误

func S2I

func S2I(s string, i interface{}) error

S2I 将JSON字符串转换为接口

参数:

s - 要转换的JSON字符串
i - 目标接口指针

返回值:

error - 转换过程中可能发生的错误

注意:

该函数是Json2Interface的快捷方式,自动处理字符串到字节数组的转换

示例:

var config Config
err := S2I(`{"setting":"value"}`, &config)

func SliceBeContains

func SliceBeContains(key string, slice []string, ignoreAa bool) bool

SliceBeContains 检查字符串是否包含切片中的任何值

参数:

key - 要搜索的字符串
slice - 包含要查找的字符串的切片
ignoreAa - 是否忽略大小写

返回值:

bool - 如果字符串包含切片中的任何值返回true,否则返回false

注意:

当ignoreAa为true时,使用不区分大小写的比较

示例:

list := []string{"apple", "banana", "orange"}
found := SliceBeContains("I like banana", list, true) // 返回true

func SliceContains

func SliceContains(slice []string, key string, ignoreAa bool) bool

SliceContains 检查字符串切片中是否包含指定子字符串

参数:

slice - 要搜索的字符串切片
key - 要查找的子字符串
ignoreAa - 是否忽略大小写

返回值:

bool - 如果找到包含子字符串的项返回true,否则返回false

注意:

当ignoreAa为true时,使用不区分大小写的比较

示例:

list := []string{"apple pie", "Banana bread", "Orange juice"}
found := SliceContains(list, "BANANA", true) // 返回true

func SliceHas

func SliceHas(slice []string, key string, ignoreAa bool) bool

SliceHas 检查字符串切片中是否包含指定的字符串

参数:

slice - 要搜索的字符串切片
key - 要查找的字符串
ignoreAa - 是否忽略大小写

返回值:

bool - 如果找到匹配项返回true,否则返回false

注意:

当ignoreAa为true时,使用不区分大小写的比较

示例:

list := []string{"apple", "Banana", "Orange"}
found := SliceHas(list, "banana", true) // 返回true

func Struct2JSON

func Struct2JSON(t interface{}, pretty bool) (string, error)

Struct2JSON 将结构体转换为JSON字符串

参数:

t - 要转换的结构体或值
pretty - 是否格式化输出

返回值:

string - 转换后的JSON字符串
error - 转换过程中可能发生的错误

示例:

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
user := User{Name: "John", Age: 30}
jsonStr, err := Struct2JSON(user, true)

func Struct2JsonNoError

func Struct2JsonNoError(t interface{}, pretty bool) string

Struct2JsonNoError 将结构体转换为JSON字符串,忽略错误

参数:

t - 要转换的结构体或值
pretty - 是否格式化输出

返回值:

string - 转换后的JSON字符串

注意:

该函数会忽略转换过程中发生的错误,适用于确定不会出错的情况

示例:

type User struct {
    Name string `json:"name"`
}
user := User{Name: "Alice"}
jsonStr := Struct2JsonNoError(user, false)

func TimeFormat2timestamp

func TimeFormat2timestamp(settime string, isMS bool) int64

TimeFormat2timestamp 将格式化的时间字符串转换为时间戳

参数:

settime - 格式化的时间字符串,格式为"2006-01-02 15:04:05"
isMS - 是否返回毫秒级时间戳

返回值:

int64 - 时间戳,如果解析失败返回-1

注意:

  1. 使用time.Parse进行解析,使用本地时区
  2. 当isMS为true时,返回毫秒级时间戳
  3. 解析失败时会记录错误日志

示例:

timestamp := TimeFormat2timestamp("2023-01-01 12:00:00", true) // 返回1672531200000

func TimeFormat2timestampString

func TimeFormat2timestampString(settime string, isMS bool) string

TimeFormat2timestampString 将格式化的时间字符串转换为字符串形式的时间戳

参数:

settime - 格式化的时间字符串,格式为"2006-01-02 15:04:05"
isMS - 是否返回毫秒级时间戳

返回值:

string - 字符串形式的时间戳,如果解析失败返回"-1"

注意:

  1. 内部调用TimeFormat2timestamp函数
  2. 使用strconv.FormatInt将int64转换为字符串

示例:

timestampStr := TimeFormat2timestampString("2023-01-01 12:00:00", true) // 返回"1672531200000"

func UUID

func UUID() string

UUID 生成符合RFC 4122标准的版本4 UUID

返回值:

string - 生成的UUID字符串,格式为"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"

注意:

  1. 使用crypto/rand包生成安全的随机数
  2. 符合UUID版本4规范: - 第13位设置为'4'表示版本4 - 第17位设置为'8'、'9'、'a'或'b'表示变体
  3. 生成的UUID是随机的,不是基于时间或MAC地址的

示例:

id := UUID() // 生成类似"f47ac10b-58cc-4372-a567-0e02b2c3d479"的UUID

func UrlDecode

func UrlDecode(s string) (string, error)

UrlDecode 对URL编码的字符串进行解码

参数:

s - 要解码的URL编码字符串

返回值:

string - 解码后的字符串
error - 如果解码失败返回错误信息

注意:

  1. 使用net/url包的QueryUnescape进行解码
  2. 解码前将字符串中的"+"替换为"%20",以处理更严格的URL编码

示例:

decoded, err := UrlDecode("Hello%20World%21") // 返回"Hello World!", nil

func UrlEncode

func UrlEncode(s string) string

UrlEncode 对字符串进行URL编码

参数:

s - 要编码的字符串

返回值:

string - URL编码后的字符串

注意:

  1. 使用net/url包的QueryEscape进行编码
  2. 将编码结果中的"+"替换为"%20",以符合更严格的URL编码标准

示例:

encoded := UrlEncode("Hello World!") // 返回"Hello%20World%21"

Types

type Detail

type Detail struct {
	Left   string `json:"left"`   // 左侧值(被比较的原始值)
	Right  string `json:"right"`  // 右侧值(比较的目标值)
	Key    string `json:"key"`    // 差异点的JSON路径
	Style  string `json:"style"`  // 差异类型:change/delete/add/type/error
	Ignore bool   `json:"ignore"` // 是否忽略该差异
}

Detail 表示差异比较的详细信息 用于记录JSON结构比较中的具体差异点

func (Detail) String

func (v Detail) String() string

String 实现Stringer接口,格式化差异信息 输出格式根据差异类型自动调整,便于阅读和日志记录

type FileHandle

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

FileHandle 封装文件句柄和定时器

type ForConfig

type ForConfig struct {
	// 公共配置参数(创建时设置)
	MaxRunSec  int  `comment:"最大运行时间(秒),0表示无限制"` // 最大运行时间(秒)
	LimitTimes int  `comment:"总执行次数限制,0表示无限制"`   // 总执行次数限制
	MaxQPS     int  `comment:"每秒最大请求数"`          // 最大QPS
	PrintQPS   bool `comment:"是否打印QPS统计信息"`      // 是否打印QPS信息
	Debug      bool `comment:"启用调试模式"`           // 调试模式
	// contains filtered or unexported fields
}

ForConfig 定义并发控制配置参数和运行时状态 注意:公共字段应在创建实例时设置,运行时修改可能不会生效

func NewFor added in v0.0.2

func NewFor(config *ForConfig) *ForConfig

NewFor 创建并发控制器实例 参数:

config - 配置参数,如果为nil则使用默认配置

返回值:

*ForConfig - 初始化完成的并发控制器实例

默认配置:

MaxQPS = 100

func (*ForConfig) Num

func (c *ForConfig) Num(start, end, concurrency int, fn func(int) bool) bool

Num 并发处理数字范围 参数:

start - 起始数字(包含)
end - 结束数字(包含)
concurrency - 最大并发goroutine数量
fn - 处理函数,参数为当前数字,返回false表示提前终止

返回值:

bool - true表示全部完成,false表示被提前终止

func (*ForConfig) ReleaseToken added in v0.0.4

func (c *ForConfig) ReleaseToken()

ReleaseToken 将令牌放回令牌桶中

注意:

  1. 该方法应在任务执行完成后调用
  2. 如果令牌桶已满,多余的令牌将被丢弃
  3. 该方法是线程安全的

func (*ForConfig) Slice

func (c *ForConfig) Slice(data interface{}, concurrency int, fn func(int, interface{}) bool) bool

Slice 并发处理切片数据 参数:

data - 需要处理的切片数据
concurrency - 最大并发goroutine数量
fn - 处理函数,参数为索引和值,返回false表示提前终止

返回值:

bool - true表示全部完成,false表示被提前终止

注意:data参数必须是slice类型,否则会panic

type JsonDiff

type JsonDiff struct {
	HasDiff bool // 是否存在差异

	Details []*Detail `json:"details"` // 差异细节列表
	Cost    string    `json:"cost"`    // 比较耗时(格式化字符串)

	Ignore []string          `json:"ignore"` // 忽略的差异列表
	KeyMap map[string]string `json:"keyMap"` // 键名映射表(左->右)

	Speed int `json:"speed"` // 比较速度等级(1-5)
	// contains filtered or unexported fields
}

JsonDiff 记录JSON差异比较的结果和状态 包含完整的比较结果和运行时状态信息

func JsonCompare

func JsonCompare(left, right interface{}) JsonDiff

JsonCompare 比较两个 json 结构的不同

func JsonComparePlus

func JsonComparePlus(left, right interface{}, keyMap map[string]string, valueMap map[string]func(left, right interface{}) bool, speed int) JsonDiff

JsonComparePlus 比较两个 json 结构的不同

  • left: 左边的 json 结构
  • right: 右边的 json 结构
  • keyMap: key 映射,key 是左边的 key,value 是右边的 key
  • valueMap: value 映射,key 是 key,value 是比较函数,返回 true 表示相等,false 表示不相等;如果是 nil,使用默认的比较函数,默认是 DeepEqual;left和right是数字时,请转成 int64 比较

func JsonCompareWithIgnore

func JsonCompareWithIgnore(left, right interface{}, ignoreKeys ...string) JsonDiff

JsonCompareWithIgnore 比较两个JSON结构,忽略指定路径的差异 参数:

left - 左侧JSON数据
right - 右侧JSON数据
ignoreKeys - 要忽略的路径列表

返回值:

JsonDiff - 差异比较结果

func (JsonDiff) DetailsString

func (d JsonDiff) DetailsString(showIgnore bool) string

DetailsString 以字符串的形式返回比较的细节

func (JsonDiff) Ignores

func (d JsonDiff) Ignores(keys ...string) JsonDiff

Ignores 忽略某些字段的比较 keys: 要忽略的字段名, 可以是多个;$.xxx.xx list:$.xxx[x],写死 x 就行 如果需要指定类型:$.xxx.xx:type,这里添加:,后面的 type 被指定,可多个:,不然默认全部忽略 类型有:change,delete,add,type,error,all,其他默认不忽略 Ignores 设置要忽略的差异规则 参数:

keys - 忽略规则列表,支持格式:
       "json.path"        - 忽略该路径所有差异
       "json.path:style"  - 忽略特定类型的差异

返回值:

JsonDiff - 新的差异比较实例(不可变设计)

注意:多次调用会合并忽略规则

func (JsonDiff) PrintAll

func (d JsonDiff) PrintAll()

PrintAll 打印所有的比较结果 PrintAll 打印完整的差异报告到标准输出 包含所有差异细节和统计信息,适合调试使用

func (JsonDiff) Result2File

func (d JsonDiff) Result2File(filepath string, name string)

Result2File 将比较结果写入文件

func (JsonDiff) ResultString

func (d JsonDiff) ResultString(name string) string

ResultString 将比较结果以字符串的形式返回

func (JsonDiff) String

func (d JsonDiff) String() string

String 以字符串的形式返回比较结果 String 实现Stringer接口,返回基本差异信息 适合快速查看主要差异,不包含细节信息

type PaddingType added in v0.0.2

type PaddingType int

PaddingType 定义填充类型常量

const (
	// PaddingPKCS5 表示使用PKCS5填充,固定块大小为8字节
	PaddingPKCS5 PaddingType = iota

	// PaddingPKCS7 表示使用PKCS7填充,块大小可变(1-255字节)
	PaddingPKCS7
)

type TimeParse

type TimeParse int64

func TimeCommon

func TimeCommon(t int64) TimeParse

TimeCommon 根据纳秒时间戳创建TimeParse对象

参数:

t - 纳秒级时间戳

返回值:

TimeParse - 表示指定时间的TimeParse对象

示例:

tp := TimeCommon(1672531200000000000) // 创建表示2023-01-01 00:00:00的TimeParse对象

func TimeFormat

func TimeFormat(format string) TimeParse

TimeFormat 根据格式化的时间字符串创建TimeParse对象

参数:

format - 格式化的时间字符串,格式为"2006-01-02 15:04:05"

返回值:

TimeParse - 表示指定时间的TimeParse对象

注意:

  1. 如果解析失败,会使用当前时间并记录错误日志
  2. 使用time.Parse进行解析

示例:

tp := TimeFormat("2023-01-01 12:00:00") // 创建表示2023-01-01 12:00:00的TimeParse对象

func TimeNow

func TimeNow() TimeParse

TimeNow 获取当前时间的TimeParse对象

返回值:

TimeParse - 表示当前时间的TimeParse对象

注意:

使用time.Now().UnixNano()获取当前时间的纳秒表示

示例:

now := TimeNow() // 返回当前时间的TimeParse对象

func (TimeParse) Add

func (t TimeParse) Add(d time.Duration) TimeParse

Add 为TimeParse对象增加指定的时间间隔

参数:

d - 要增加的时间间隔

返回值:

TimeParse - 增加时间间隔后的新TimeParse对象

示例:

newTime := tp.Add(time.Hour) // 增加1小时

func (TimeParse) DayEnd

func (t TimeParse) DayEnd() TimeParse

DayEnd 获取TimeParse对象所在天的结束时间

返回值:

TimeParse - 表示当天23:59:59.99的TimeParse对象

示例:

end := tp.DayEnd() // 返回当天23:59:59.99的TimeParse对象

func (TimeParse) DayStart

func (t TimeParse) DayStart() TimeParse

DayStart 获取TimeParse对象所在天的开始时间

返回值:

TimeParse - 表示当天00:00:00的TimeParse对象

示例:

start := tp.DayStart() // 返回当天00:00:00的TimeParse对象

func (TimeParse) TimeFormat

func (t TimeParse) TimeFormat(format string) string

TimeFormat 将TimeParse对象格式化为指定格式的字符串

参数:

format - 时间格式字符串

返回值:

string - 格式化后的时间字符串

示例:

str := tp.TimeFormat("2006-01-02") // 返回"2023-01-01"

func (TimeParse) TimeFormatDefault

func (t TimeParse) TimeFormatDefault() string

TimeFormatDefault 将TimeParse对象格式化为默认格式的字符串

返回值:

string - 格式化后的时间字符串,格式为"2006-01-02 15:04:05"

示例:

str := tp.TimeFormatDefault() // 返回"2023-01-01 12:00:00"

func (TimeParse) Unix

func (t TimeParse) Unix() int64

Unix 获取TimeParse对象的秒级时间戳

返回值:

int64 - 秒级时间戳

示例:

timestamp := tp.Unix() // 返回秒级时间戳

func (TimeParse) Unix2String added in v0.0.4

func (t TimeParse) Unix2String() string

Unix 获取TimeParse对象的秒级时间戳

返回值:

int64 - 秒级时间戳

示例:

timestamp := tp.Unix() // 返回秒级时间戳

func (TimeParse) UnixMilli

func (t TimeParse) UnixMilli() int64

UnixMilli 获取TimeParse对象的毫秒级时间戳

返回值:

int64 - 毫秒级时间戳

示例:

milli := tp.UnixMilli() // 返回毫秒级时间戳

func (TimeParse) UnixMilli2Strig added in v0.0.4

func (t TimeParse) UnixMilli2Strig() string

UnixMilli 获取TimeParse对象的毫秒级时间戳

返回值:

int64 - 毫秒级时间戳

示例:

milli := tp.UnixMilli() // 返回毫秒级时间戳

func (TimeParse) UnixNano

func (t TimeParse) UnixNano() int64

UnixNano 获取TimeParse对象的纳秒级时间戳

返回值:

int64 - 纳秒级时间戳

示例:

nano := tp.UnixNano() // 返回纳秒级时间戳

Jump to

Keyboard shortcuts

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