- 新增 AddHeaders 方法支持批量添加请求头参数 - 新增 RefererHeader 结构体用于管理 Referer 和 TraceId - 添加随机字符串生成工具包 random - 集成 MD5 加密和追踪 ID 生成功能 - 修改 IP 服务域名从 ip.gaore.com 到 ip.gaore.com.hk - 在客户端请求中自动添加 Referer 和 Traceparent 头信息
70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
package random
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
type Mode int // 随机数模式
|
|
|
|
const (
|
|
Letter Mode = iota
|
|
Number
|
|
LetterNumber
|
|
LetterHex
|
|
)
|
|
|
|
const (
|
|
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
numbers = "0123456789"
|
|
lettersHex = "0123456789abcdef"
|
|
letterIdBit = 6
|
|
letterIdxMask = 1<<letterIdBit - 1
|
|
letterIdxMax = 63 / letterIdBit
|
|
)
|
|
|
|
func StrRandom(n int64) string {
|
|
return Random(n, Letter)
|
|
}
|
|
|
|
func NumRandom(n int64) string {
|
|
return Random(n, Number)
|
|
}
|
|
|
|
func Random(n int64, mode ...Mode) string {
|
|
var baseStr string
|
|
mode = append(mode, LetterNumber)
|
|
switch mode[0] {
|
|
case LetterHex:
|
|
baseStr = lettersHex
|
|
case Letter:
|
|
baseStr = letters
|
|
case Number:
|
|
baseStr = numbers
|
|
case LetterNumber:
|
|
fallthrough
|
|
default:
|
|
baseStr = letters + numbers
|
|
}
|
|
return random(n, baseStr)
|
|
}
|
|
|
|
func random(n int64, baseStr string) string {
|
|
|
|
var src = rand.NewSource(time.Now().UnixNano())
|
|
b := make([]byte, n)
|
|
for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
|
|
if remain == 0 {
|
|
cache, remain = src.Int63(), letterIdxMax
|
|
}
|
|
if idx := int(cache & letterIdxMask); idx < len(baseStr) {
|
|
b[i] = baseStr[idx]
|
|
i--
|
|
}
|
|
cache >>= letterIdBit
|
|
remain--
|
|
}
|
|
return *(*string)(unsafe.Pointer(&b))
|
|
}
|