utils

package module
v0.0.0-...-614f6bd Latest Latest
Warning

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

Go to latest
Published: Jul 18, 2025 License: MIT Imports: 18 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// Bits allocation (标准Snowflake结构)
	TimestampBits = 41
	WorkIDBits    = 10
	SequenceBits  = 12

	// Max values
	MaxWorkID   = 1<<WorkIDBits - 1   // 1023 (10 bits)
	MaxSequence = 1<<SequenceBits - 1 // 4095 (12 bits), 实际使用4000避免边界问题

	// Bit shifts
	WorkIDShift    = SequenceBits              // 12
	TimestampShift = SequenceBits + WorkIDBits // 22
)
View Source
const (
	StatusUnknown = iota + 10
	StatusNil
	StatusPing
	StatusPong
	StatusGoaway
	StatusRequest
	StatusResponse
	StatusNotify
	StatusCtxCancelFunc
	StatusSubscribe
	StatusUnsubscribe
	StatusBroadcast
	StatusOnSuccess
	StatusOnError
	StatusError
)

自定义协议状态码(10-99)

View Source
const (
	StatusUnknown16 uint16 = iota + 10
	StatusNil16
	StatusPing16
	StatusPong16
	StatusGoaway16
	StatusRequest16
	StatusResponse16
	StatusNotify16
	StatusCtxCancelFunc16
	StatusSubscribe16
	StatusUnsubscribe16
	StatusBroadcast16
	StatusOnSuccess16
	StatusOnError16
	StatusError16
)

自定义协议状态码(10-99)

View Source
const (
	StatusContinue           = 100 // RFC 7231, 6.2.1
	StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
	StatusProcessing         = 102 // RFC 2518, 10.1
	StatusEarlyHints         = 103 // RFC 8297

	StatusOK                   = 200 // RFC 7231, 6.3.1
	StatusCreated              = 201 // RFC 7231, 6.3.2
	StatusAccepted             = 202 // RFC 7231, 6.3.3
	StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
	StatusNoContent            = 204 // RFC 7231, 6.3.5
	StatusResetContent         = 205 // RFC 7231, 6.3.6
	StatusMultiStatus          = 207 // RFC 4918, 11.1
	StatusAlreadyReported      = 208 // RFC 5842, 7.1
	StatusIMUsed               = 226 // RFC 3229, 10.4.1

	StatusMultipleChoices   = 300 // RFC 7231, 6.4.1
	StatusMovedPermanently  = 301 // RFC 7231, 6.4.2
	StatusFound             = 302 // RFC 7231, 6.4.3
	StatusSeeOther          = 303 // RFC 7231, 6.4.4
	StatusNotModified       = 304 // RFC 7232, 4.1
	StatusUseProxy          = 305 // RFC 7231, 6.4.5
	StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7
	StatusPermanentRedirect = 308 // RFC 7538, 3

	StatusBadRequest                   = 400 // RFC 7231, 6.5.1
	StatusUnauthorized                 = 401 // RFC 7235, 3.1
	StatusPaymentRequired              = 402 // RFC 7231, 6.5.2
	StatusForbidden                    = 403 // RFC 7231, 6.5.3
	StatusNotFound                     = 404 // RFC 7231, 6.5.4
	StatusMethodNotAllowed             = 405 // RFC 7231, 6.5.5
	StatusNotAcceptable                = 406 // RFC 7231, 6.5.6
	StatusProxyAuthRequired            = 407 // RFC 7235, 3.2
	StatusRequestTimeout               = 408 // RFC 7231, 6.5.7
	StatusConflict                     = 409 // RFC 7231, 6.5.8
	StatusGone                         = 410 // RFC 7231, 6.5.9
	StatusLengthRequired               = 411 // RFC 7231, 6.5.10
	StatusPreconditionFailed           = 412 // RFC 7232, 4.2
	StatusRequestEntityTooLarge        = 413 // RFC 7231, 6.5.11
	StatusRequestURITooLong            = 414 // RFC 7231, 6.5.12
	StatusUnsupportedMediaType         = 415 // RFC 7231, 6.5.13
	StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4
	StatusExpectationFailed            = 417 // RFC 7231, 6.5.14
	StatusTeapot                       = 418 // RFC 7168, 2.3.3
	StatusMisdirectedRequest           = 421 // RFC 7540, 9.1.2
	StatusUnprocessableEntity          = 422 // RFC 4918, 11.2
	StatusLocked                       = 423 // RFC 4918, 11.3
	StatusFailedDependency             = 424 // RFC 4918, 11.4
	StatusUpgradeRequired              = 426 // RFC 7231, 6.5.15
	StatusPreconditionRequired         = 428 // RFC 6585, 3
	StatusTooManyRequests              = 429 // RFC 6585, 4
	StatusRequestHeaderFieldsTooLarge  = 431 // RFC 6585, 5
	StatusUnavailableForLegalReasons   = 451 // RFC 7725, 3

	StatusInternalServerError           = 500 // RFC 7231, 6.6.1
	StatusNotImplemented                = 501 // RFC 7231, 6.6.2
	StatusBadGateway                    = 502 // RFC 7231, 6.6.3
	StatusServiceUnavailable            = 503 // RFC 7231, 6.6.4
	StatusGatewayTimeout                = 504 // RFC 7231, 6.6.5
	StatusHTTPVersionNotSupported       = 505 // RFC 7231, 6.6.6
	StatusVariantAlsoNegotiates         = 506 // RFC 2295, 8.1
	StatusInsufficientStorage           = 507 // RFC 4918, 11.5
	StatusLoopDetected                  = 508 // RFC 5842, 7.2
	StatusNotExtended                   = 510 // RFC 2774, 7
	StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6
)

HTTP状态码,参见RFC 2616

View Source
const (
	StatusContinue16           uint16 = 100
	StatusSwitchingProtocols16 uint16 = 101
	StatusProcessing16         uint16 = 102
	StatusEarlyHints16         uint16 = 103

	StatusOK16                   uint16 = 200
	StatusCreated16              uint16 = 201
	StatusAccepted16             uint16 = 202
	StatusNonAuthoritativeInfo16 uint16 = 203
	StatusNoContent16            uint16 = 204
	StatusResetContent16         uint16 = 205
	StatusPartialContent16       uint16 = 206
	StatusMultiStatus16          uint16 = 207
	StatusAlreadyReported16      uint16 = 208
	StatusIMUsed16               uint16 = 226

	StatusMultipleChoices16   uint16 = 300
	StatusMovedPermanently16  uint16 = 301
	StatusFound16             uint16 = 302
	StatusSeeOther16          uint16 = 303
	StatusNotModified16       uint16 = 304
	StatusUseProxy16          uint16 = 305
	StatusTemporaryRedirect16 uint16 = 307
	StatusPermanentRedirect16 uint16 = 308

	StatusBadRequest16                   uint16 = 400
	StatusUnauthorized16                 uint16 = 401
	StatusPaymentRequired16              uint16 = 402
	StatusForbidden16                    uint16 = 403
	StatusNotFound16                     uint16 = 404
	StatusMethodNotAllowed16             uint16 = 405
	StatusNotAcceptable16                uint16 = 406
	StatusProxyAuthRequired16            uint16 = 407
	StatusRequestTimeout16               uint16 = 408
	StatusConflict16                     uint16 = 409
	StatusGone16                         uint16 = 410
	StatusLengthRequired16               uint16 = 411
	StatusPreconditionFailed16           uint16 = 412
	StatusRequestEntityTooLarge16        uint16 = 413
	StatusRequestURITooLong16            uint16 = 414
	StatusUnsupportedMediaType16         uint16 = 415
	StatusRequestedRangeNotSatisfiable16 uint16 = 416
	StatusExpectationFailed16            uint16 = 417
	StatusTeapot16                       uint16 = 418
	StatusMisdirectedRequest16           uint16 = 421
	StatusUnprocessableEntity16          uint16 = 422
	StatusLocked16                       uint16 = 423
	StatusFailedDependency16             uint16 = 424
	StatusUpgradeRequired16              uint16 = 426
	StatusPreconditionRequired16         uint16 = 428
	StatusTooManyRequests16              uint16 = 429
	StatusRequestHeaderFieldsTooLarge16  uint16 = 431
	StatusUnavailableForLegalReasons16   uint16 = 451

	StatusInternalServerError16           uint16 = 500
	StatusNotImplemented16                uint16 = 501
	StatusBadGateway16                    uint16 = 502
	StatusServiceUnavailable16            uint16 = 503
	StatusGatewayTimeout16                uint16 = 504
	StatusHTTPVersionNotSupported16       uint16 = 505
	StatusVariantAlsoNegotiates16         uint16 = 506
	StatusInsufficientStorage16           uint16 = 507
	StatusLoopDetected16                  uint16 = 508
	StatusNotExtended16                   uint16 = 510
	StatusNetworkAuthenticationRequired16 uint16 = 511
)

HTTP状态码

Variables

View Source
var ErrMachineTimeUnSynchronize = errors.New("机器时钟后跳, timeGen()生成时间戳, 早于SnowFlakeId记录的时间戳")

ErrMachineTimeUnSynchronize 定义错误

Functions

func BytesToString

func BytesToString(b []byte) string

BytesToString Bytes转String 转后不要修改Bytes

func EndOfMonth

func EndOfMonth(date time.Time) time.Time

EndOfMonth 获取月底

func EndOfQuarter

func EndOfQuarter(date time.Time) time.Time

EndOfQuarter 获取季度末

func EndOfWeek

func EndOfWeek(date time.Time) time.Time

EndOfWeek 获取每周的结束日

func EndOfYear

func EndOfYear(date time.Time) time.Time

EndOfYear 获取年底

func FormatDuration

func FormatDuration(duration time.Duration) string

FormatDuration 将持续时间格式化字符串 (e.g., "3天 05小时 12分 45秒").

func FormatRecover

func FormatRecover() ([]byte, any)

func FullStack

func FullStack(w error) string

FullStack 获取完整调用栈

func Hash64FNV1A

func Hash64FNV1A[T string | []byte](data T) uint64

FNV-1a算法

func Hash64WY

func Hash64WY[T string | []byte](data T, seed uint64) uint64

Hash64WY returns a 64bit digest of the data with different ones for every seed.

func Log2Up

func Log2Up(x uint32) int

Log2Up 取上一个2的对数

func MetaDictEncode

func MetaDictEncode(m MetaDict[string]) []byte

Encode 编码 将字典编码为字节切片。

func MetaDictEncoder

func MetaDictEncoder(m MetaDict[string], w io.Writer) error

func ParseID

func ParseID(id int64) int64

ParseID 取得工作机器id

func PrivateIPv4

func PrivateIPv4() ([]string, error)

PrivateIPv4 返回所有本地私有IPv4地址(按RFC 1918RFC 4193标准)。 如果找不到私有IP,返回空切片和错误信息。

func RemoveDuplicates

func RemoveDuplicates[T cmp.Ordered](s []T) []T

RemoveDuplicates 排序去重

func Stack

func Stack(err error) string

func StartOfMonth

func StartOfMonth(date time.Time) time.Time

StartOfMonth 获取月初

func StartOfQuarter

func StartOfQuarter(date time.Time) time.Time

StartOfQuarter 获取季度初数据

func StartOfWeek

func StartOfWeek(date time.Time) time.Time

StartOfWeek 获取每周的开始日

func StartOfYear

func StartOfYear(date time.Time) time.Time

StartOfYear 获取新年伊始

func StringToBytes

func StringToBytes(s string) (b []byte)

StringToBytes String转Bytes 转后不要修改Bytes

func Three

func Three[T any](boolExpression bool, trueReturnValue, falseReturnValue T) T

Three 三元表达式,模拟三元条件运算

func UniqueWithoutSort

func UniqueWithoutSort[T comparable](s []T) []T

UniqueWithoutSort 去重但不排序

func WithRetry

func WithRetry(operation func() error, baseDelay time.Duration, maxRetries int) error

重试机制

func WrapStack

func WrapStack(skip int, err error) error

Types

type Cell

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

type CopyOnWriteList

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

CopyOnWriteList (COW)需要修改的时候拷贝一个副本出来,适用不频繁写的场景 修改时新数据原子替换旧数据地址,旧数据由GC回收。

func NewCopyOnWriteList

func NewCopyOnWriteList[T any]() *CopyOnWriteList[T]

NewCopyOnWriteList 新增

func (*CopyOnWriteList[T]) Add

func (l *CopyOnWriteList[T]) Add(element T)

Add 增加

func (*CopyOnWriteList[T]) List

func (l *CopyOnWriteList[T]) List() []T

List 列

func (*CopyOnWriteList[T]) Remove

func (l *CopyOnWriteList[T]) Remove(predicate func(T) bool)

Remove 移除

type IdempotentCache

type IdempotentCache[T string | []byte] struct {
	// contains filtered or unexported fields
}

IdempotentCache 幂等函数缓存,幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数

func (*IdempotentCache[T]) Get

func (ic *IdempotentCache[T]) Get(in T) any

Get 用于获取缓存中的结果

func (*IdempotentCache[T]) Init

func (ic *IdempotentCache[T]) Init(power, seed uint64, do func(T) any)

Init 初始化 power表示缓存最大数量的的2的次方,seed表示hash的种子,do表示要缓存的幂等函数

func (*IdempotentCache[T]) Remove

func (ic *IdempotentCache[T]) Remove(in T)

Remove 移除缓存

type MetaDict

type MetaDict[T MetaDictValue] struct {
	Key   []uint64
	Value []T
}

MetaDict 非线程安全,key数量超过5个后,效率低于map

func MetaDictDecode

func MetaDictDecode(data []byte) (m MetaDict[string])

Decode 解码 将字节切片解码为字典。

func (MetaDict[MetaDictValue]) Del

func (m MetaDict[MetaDictValue]) Del(key string) MetaDict[MetaDictValue]

Del 根据给定的键删除相应的键值对。

func (MetaDict[MetaDictValue]) Get

func (m MetaDict[MetaDictValue]) Get(key string) (v MetaDictValue, ok bool)

Get 根据给定的键返回相应的值。如果键存在,则返回对应的值和true;如果键不存在,则返回空字符串和false。

func (MetaDict[MetaDictValue]) GetAll

func (m MetaDict[MetaDictValue]) GetAll() (s []MetaDictValue)

GetAll

func (MetaDict[MetaDictValue]) Len

func (m MetaDict[MetaDictValue]) Len() int

Len 长度

func (MetaDict[MetaDictValue]) Set

func (m MetaDict[MetaDictValue]) Set(key string, value MetaDictValue) MetaDict[MetaDictValue]

Set 设置给定键的值,如果该键已存在,则更新值;如果不存在,则添加新的键值对。

type MetaDictValue

type MetaDictValue interface {
	~string | ~[]byte | any
}

type Pool

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

Pool

func (*Pool) AllocBuffer

func (p *Pool) AllocBuffer() *bytes.Buffer

func (*Pool) AllocSlice

func (p *Pool) AllocSlice() *[]byte

func (*Pool) FreeBuffer

func (p *Pool) FreeBuffer(x *bytes.Buffer)

func (*Pool) FreeSlice

func (p *Pool) FreeSlice(x *[]byte)

type RollingWindow

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

RollingWindow 环形滑动窗口统计

func NewRollingWindow

func NewRollingWindow(totalPow, interval, bucketleghthPow int) *RollingWindow

NewRollingWindow

func (*RollingWindow) Add

func (r *RollingWindow) Add(n int64) error

Add

func (*RollingWindow) Sampling

func (r *RollingWindow) Sampling() []int

func (*RollingWindow) Store

func (r *RollingWindow) Store(n int64)

Store

type SnowFlakeID

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

SnowFlakeID 工作站

func NewSnowFlakeID

func NewSnowFlakeID(workerID int64, startupTime int64) *SnowFlakeID

NewSnowFlakeID 工作组

func (*SnowFlakeID) NextID

func (s *SnowFlakeID) NextID() (int64, error)

NextID 取得 snowflake id.

func (*SnowFlakeID) ParseID

func (s *SnowFlakeID) ParseID() int64

ParseID 取得工作机器id

type Timing

type Timing struct {
	AddTaskChan chan task
	// contains filtered or unexported fields
}

func NewTiming

func NewTiming(panicHandler func(error)) *Timing

NewTiming 新建

func (*Timing) AddTask

func (t *Timing) AddTask(next time.Time, f func() time.Duration) error

AddTask 加入任务

func (*Timing) Stop

func (t *Timing) Stop()

Stop 停止

type TokenBucketLimiter

type TokenBucketLimiter struct {
	//限流器速率,每秒处理的令牌数
	LimitRate int64
	//限流器大小,存放令牌的最大值
	Capacity int64
	//加入的时间间隔
	Snippet time.Duration
	// contains filtered or unexported fields
}

Limiter 限流器 Token Bucket(令牌桶) 每隔一段时间加入一批令牌,达到上限后,不再增加。

func NewTokenBucketLimiter

func NewTokenBucketLimiter(limitRate, size int64, snippet time.Duration) *TokenBucketLimiter

NewTokenBucketLimiter limitRate, limitSize,snippet数值较小时,准确度低。

func (*TokenBucketLimiter) Close

func (t *TokenBucketLimiter) Close()

Close 关闭。

func (*TokenBucketLimiter) Run

func (t *TokenBucketLimiter) Run()

func (*TokenBucketLimiter) Take

func (t *TokenBucketLimiter) Take(n int64) bool

Take 等待,申请n个令牌,取不到足够数量时返回失败。

func (*TokenBucketLimiter) Task

func (t *TokenBucketLimiter) Task() time.Duration

Task 用于定时模块 Timing

type Universe

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

func NewUniverse

func NewUniverse() *Universe

func (*Universe) Close

func (u *Universe) Close()

Close 关闭

func (*Universe) Get

func (u *Universe) Get(n int) any

Get 线程不安全,需控制在evaluate函数内运行

func (*Universe) GetInt

func (u *Universe) GetInt(n int) int

GetInt 线程不安全,需控制在evaluate函数内运行

func (*Universe) GetString

func (u *Universe) GetString(n int) string

GetString 线程不安全,需控制在evaluate函数内运行

func (*Universe) NewComputer

func (u *Universe) NewComputer(effect func(any), warp func(*Universe) (func() any, []int)) int

NewComputer 线程不安全

func (*Universe) NewSignal

func (u *Universe) NewSignal(v any, effect func(any)) int

线程不安全

func (*Universe) Operate

func (u *Universe) Operate(n int, do func(any))

Operate 非原子性,乱序执行。

func (*Universe) Run

func (u *Universe) Run()

func (*Universe) SetSignal

func (u *Universe) SetSignal(n int, a any)

SetSignal 非原子性,乱序执行。

Jump to

Keyboard shortcuts

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