Documentation ¶
Overview ¶
Package utils some useful tools fo Golang
Modules ¶
Contains some useful tools in different directories:
- `color.go`: colorful code
- `compressor.go`: compress and extract dir/files
- `configserver.go`: load configs from file or config-server
- `email.go`: SMTP email sdk
- `encrypt.go`: some tools for encrypt and decrypt, support AES, RSA, ECDSA, MD5, SHA128, SHA256
- `fs.go`: some tools to read, move, walk dir/files
- `http.go`: some tools to send http request
- `jwt.go`: some tools to generate and parse JWT
- `logger.go`: enhanched zap logger
- `math.go`: some math tools to deal with int, round
- `net.go`: some tools to deal with tcp/udp
- `random.go`: generate random string, int
- `settings.go`: read configs from file or config-server
- `sort.go`: easier to sort
- `sync.go`: some locks depends on atomic
- `throttle.go`: faster rate limiter
- `time.go`: faster clock (if you do not enable vdso)
- `utils`: some useful tools
Index ¶
- Constants
- Variables
- func AESEncryptFilesInDir(dir string, secret []byte, opts ...SettingsEncryptOptf) (err error)deprecated
- func AESEncryptFilesInDir2(dir string, secret []byte, opts ...SettingsEncryptOptf) (err error)
- func AbsInt32(v int32) int32
- func AbsInt64(v int64) int64
- func AddFileToZip(zipWriter *zip.Writer, filename, basedir string) error
- func AutoGC(ctx context.Context, opts ...GcOptFunc) (err error)
- func Base64Decode(encoded string) ([]byte, error)
- func Base64Encode(raw []byte) string
- func Bytes2Str(b []byte) string
- func CheckResp(resp *http.Response) error
- func CloseQuietly(v io.Closer)
- func Color(color int, s string) string
- func ConvertMap2StringKey(inputMap interface{}) map[string]interface{}
- func CopyFile(src, dst string) (err error)
- func DecodeECDSAPrivateKey(pemEncoded []byte) (*ecdsa.PrivateKey, error)
- func DecodeECDSAPublicKey(pemEncodedPub []byte) (*ecdsa.PublicKey, error)
- func DecodeES256SignByBase64(sign string) (a, b *big.Int, err error)
- func DecodeES256SignByHex(sign string) (a, b *big.Int, err error)
- func DecodeRSAPrivateKey(pemEncoded []byte) (*rsa.PrivateKey, error)
- func DecodeRSAPublicKey(pemEncodedPub []byte) (*rsa.PublicKey, error)
- func DecryptByAes(secret []byte, encrypted []byte) ([]byte, error)
- func Dedent(v string, optfs ...DedentOptFunc) string
- func DeepClone(src interface{}) (dst interface{})
- func DirSize(path string) (size int64, err error)
- func EncodeECDSAPrivateKey(privateKey *ecdsa.PrivateKey) ([]byte, error)
- func EncodeECDSAPublicKey(publicKey *ecdsa.PublicKey) ([]byte, error)
- func EncodeES256SignByBase64(a, b *big.Int) string
- func EncodeES256SignByHex(a, b *big.Int) string
- func EncodeRSAPrivateKey(privateKey *rsa.PrivateKey) ([]byte, error)
- func EncodeRSAPublicKey(publicKey *rsa.PublicKey) ([]byte, error)
- func EncryptByAes(secret []byte, cnt []byte) ([]byte, error)
- func FallBack(orig func() interface{}, fallback interface{}) (ret interface{})
- func FlattenMap(data map[string]interface{}, delimiter string)
- func ForceGCBlocking()
- func ForceGCUnBlocking()
- func FormatBig2Base64(b *big.Int) string
- func FormatBig2Hex(b *big.Int) string
- func GeneratePasswordHash(password []byte) ([]byte, error)
- func GetFuncName(f interface{}) string
- func GetStructFieldByName(st interface{}, fieldName string) interface{}
- func GracefulCancel(cancel func())
- func HTTPInvalidStatusError(statusCode int) error
- func HasField(st interface{}, fieldName string) bool
- func HasMethod(st interface{}, methodName string) bool
- func HashSHA128String(val string) string
- func HashSHA256String(val string) string
- func HashXxhashString(val string) string
- func HumanReadableByteCount(bytes int64, si bool) (ret string)
- func InArray(collection interface{}, ele interface{}) bool
- func IsDir(path string) (bool, error)
- func IsDirWritable(dir string) (err error)
- func IsFile(path string) (bool, error)
- func IsHasField(st interface{}, fieldName string) booldeprecated
- func IsHasMethod(st interface{}, methodName string) booldeprecated
- func IsPanic(f func()) (isPanic bool)
- func IsPtr(t interface{}) bool
- func IsRemoteUDPPortOpen(addr string) error
- func JumpHash(key uint64, numBuckets int) (int32, error)
- func ListFilesInDir(dir string) (files []string, err error)
- func MD5JSON(data interface{}) (string, error)
- func MaxInt(a, b int) int
- func MinInt(a, b int) int
- func MoveFile(src, dst string) (err error)
- func NewHTTPClient(opts ...HTTPClientOptFunc) (c *http.Client, err error)
- func NewRand() *rand.Rand
- func NewSkiplist() *skiplist.SkipList
- func NewTmpFileForContent(content []byte) (path string, err error)
- func NilInterface(data interface{}) bool
- func PanicIfErr(err error)
- func ParseBase642Big(raw string) (*big.Int, error)
- func ParseHex2Big(hex string) (b *big.Int, ok bool)
- func ParseHex2UTC(ts string) (t time.Time, err error)
- func ParseHexNano2UTC(ts string) (t time.Time, err error)
- func ParseJWTTokenWithoutValidate(token string, payload jwt.Claims) (err error)
- func ParseLoggerLevel(level string) (zapcore.Level, error)
- func ParseUnix2String(ts int64, layout string) string
- func ParseUnix2UTC(ts int64) time.Time
- func ParseUnixNano2UTC(ts int64) time.Time
- func Race(gs ...func())
- func RaceWithCtx(ctx context.Context, gs ...func())
- func RandomStringWithLength(n int) string
- func RegexNamedSubMatch(r *regexp.Regexp, str string, subMatchMap map[string]string) error
- func RemoveEmpty(vs []string) (r []string)
- func RequestJSON(method, url string, request *RequestData, resp interface{}) (err error)
- func RequestJSONWithClient(httpClient *http.Client, method, url string, request *RequestData, ...) (err error)
- func Round(val float64, d int) float64
- func RunCMD(ctx context.Context, app string, args ...string) (stdout []byte, err error)
- func RunWithTimeout(timeout time.Duration, f func())
- func SecRandInt(n int) (int, error)
- func SecRandomStringWithLength(n int) (string, error)
- func SetInternalClock(interval time.Duration)
- func SetStructFieldsBySlice(structs, vals interface{}) (err error)
- func SignByECDSAWithSHA256(priKey *ecdsa.PrivateKey, content []byte) (r, s *big.Int, err error)
- func SignByRSAWithSHA256(priKey *rsa.PrivateKey, content []byte) ([]byte, error)
- func SignReaderByECDSAWithSHA256(priKey *ecdsa.PrivateKey, reader io.Reader) (r, s *big.Int, err error)
- func SignReaderByRSAWithSHA256(priKey *rsa.PrivateKey, reader io.Reader) (sig []byte, err error)
- func SleepWithContext(ctx context.Context, duration time.Duration)
- func StopSignal(optfs ...StopSignalOptFunc) (stopCh <-chan struct{})
- func Str2Bytes(s string) []byte
- func TemplateWithMap(tpl string, data map[string]interface{}) string
- func TemplateWithMapAndRegexp(tplReg *regexp.Regexp, tpl string, data map[string]interface{}) string
- func TrimEleSpaceAndRemoveEmpty(vs []string) (r []string)
- func URLMasking(url, mask string) string
- func UTCNow() time.Time
- func UniqueStrings(vs []string) (r []string)
- func Unzip(src string, dest string) (filenames []string, err error)
- func ValidateFileHash(filepath string, hashed string) error
- func ValidatePasswordHash(hashedPassword, password []byte) bool
- func VerifyByECDSAWithSHA256(pubKey *ecdsa.PublicKey, content []byte, r, s *big.Int) bool
- func VerifyByRSAWithSHA256(pubKey *rsa.PublicKey, content []byte, sig []byte) error
- func VerifyReaderByECDSAWithSHA256(pubKey *ecdsa.PublicKey, reader io.Reader, r, s *big.Int) (bool, error)
- func VerifyReaderByRSAWithSHA256(pubKey *rsa.PublicKey, reader io.Reader, sig []byte) error
- func ZipFiles(output string, files []string) (err error)
- type AesReaderWrapper
- type AlertHookOptFunc
- type AlertPusher
- type AsyncTask
- type AsyncTaskResult
- type AsyncTaskStatus
- type AsyncTaskStore
- type AtomicFieldBool
- type ChildParallelCounter
- type Clock2Type
- type ClockItf
- type ClockType
- func (c *ClockType) Close()
- func (c *ClockType) GetDate() (time.Time, error)
- func (c *ClockType) GetNanoTimeInHex() string
- func (c *ClockType) GetTimeInHex() string
- func (c *ClockType) GetTimeInRFC3339Nano() string
- func (c *ClockType) GetUTCNow() time.Time
- func (c *ClockType) Interval() time.Duration
- func (c *ClockType) SetInterval(interval time.Duration)
- type CompressOptFunc
- type CompressorItf
- type Config
- type ConfigSource
- type ConfigSrv
- func (c *ConfigSrv) Fetch() error
- func (c *ConfigSrv) Get(name string) (interface{}, bool)
- func (c *ConfigSrv) GetBool(name string) (val bool, ok bool)
- func (c *ConfigSrv) GetInt(name string) (val int, ok bool)
- func (c *ConfigSrv) GetString(name string) (string, bool)
- func (c *ConfigSrv) Map(set func(string, interface{}))
- type Counter
- type CtxKeyT
- type DedentOptFunc
- type Deque
- type DequeOptFunc
- type EmailDialer
- type ExpCache
- type ExpiredRLock
- type FIFO
- type FLock
- type GZCompressor
- type GcOptFunc
- type HTTPClientOptFunc
- type HeapItemItf
- type HeapSlice
- type Int64CounterItf
- type JWT
- func (e *JWT) ParseClaims(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
- func (e *JWT) ParseClaimsByES256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
- func (e *JWT) ParseClaimsByHS256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
- func (e *JWT) ParseClaimsByRS256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
- func (e *JWT) Sign(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
- func (e *JWT) SignByES256(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
- func (e *JWT) SignByHS256(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
- type JWTDiviceOptFunc
- type JWTOptFunc
- type LRUExpiredMap
- type LimitSizeHeap
- type LoggerEncoding
- type LoggerItf
- func CreateNewDefaultLogger(name, level string, opts ...zap.Option) (l LoggerItf, err error)
- func NewConsoleLoggerWithName(name, level string, opts ...zap.Option) (l LoggerItf, err error)
- func NewLogger(optfs ...LoggerOptFunc) (l LoggerItf, err error)
- func NewLoggerWithName(name, level string, opts ...zap.Option) (l LoggerItf, err error)
- type LoggerOptFunc
- func WithLoggerEncoding(format LoggerEncoding) LoggerOptFunc
- func WithLoggerErrorOutputPaths(paths []string) LoggerOptFunc
- func WithLoggerLevel(level string) LoggerOptFunc
- func WithLoggerName(name string) LoggerOptFunc
- func WithLoggerOutputPaths(paths []string) LoggerOptFunc
- func WithLoggerZapOptions(opts ...zap.Option) LoggerOptFunc
- type LoggerType
- func (l *LoggerType) ChangeLevel(level string) (err error)
- func (l *LoggerType) Clone() LoggerItf
- func (l *LoggerType) DebugSample(sample int, msg string, fields ...zapcore.Field)
- func (l *LoggerType) InfoSample(sample int, msg string, fields ...zapcore.Field)
- func (l *LoggerType) Level() zapcore.Level
- func (l *LoggerType) Named(s string) LoggerItf
- func (l *LoggerType) WarnSample(sample int, msg string, fields ...zapcore.Field)
- func (l *LoggerType) With(fields ...zapcore.Field) LoggerItf
- func (l *LoggerType) WithOptions(opts ...zap.Option) LoggerItf
- type Mail
- type MailSendOptFunc
- type Mutex
- type PGZCompressor
- type PairList
- type ParallelCounter
- type PriorityQ
- type RequestData
- type RotateCounter
- func NewRotateCounter(rotatePoint int64) (*RotateCounter, error)
- func NewRotateCounterFromN(n, rotatePoint int64) (*RotateCounter, error)
- func NewRotateCounterFromNWithCtx(ctx context.Context, n, rotatePoint int64) (*RotateCounter, error)
- func NewRotateCounterWithCtx(ctx context.Context, rotatePoint int64) (*RotateCounter, error)
- type SettingsEncryptOptf
- type SettingsOptFunc
- func WithSettingsAesEncrypt(key []byte) SettingsOptFunc
- func WithSettingsEnableInclude() SettingsOptFunc
- func WithSettingsEncryptedFileContain(filenameMark string) SettingsOptFuncdeprecated
- func WithSettingsEncryptedFileSuffix(suffix string) SettingsOptFunc
- func WithSettingsInclude(enableInclude bool) SettingsOptFuncdeprecated
- type SettingsType
- func (s *SettingsType) BindPFlags(p *pflag.FlagSet) error
- func (s *SettingsType) Get(key string) interface{}
- func (s *SettingsType) GetBool(key string) bool
- func (s *SettingsType) GetDuration(key string) time.Duration
- func (s *SettingsType) GetInt(key string) int
- func (s *SettingsType) GetInt64(key string) int64
- func (s *SettingsType) GetString(key string) string
- func (s *SettingsType) GetStringMap(key string) map[string]interface{}
- func (s *SettingsType) GetStringMapString(key string) map[string]string
- func (s *SettingsType) GetStringSlice(key string) []string
- func (s *SettingsType) IsSet(key string) bool
- func (s *SettingsType) LoadFromConfigServer(url, app, profile, label string) (err error)
- func (s *SettingsType) LoadFromConfigServerWithRawYaml(url, app, profile, label, key string) (err error)
- func (s *SettingsType) LoadFromDir(dirPath string) error
- func (s *SettingsType) LoadFromFile(filePath string, opts ...SettingsOptFunc) (err error)
- func (s *SettingsType) LoadSettings()
- func (s *SettingsType) Set(key string, val interface{})
- func (s *SettingsType) Unmarshal(obj interface{}) error
- func (s *SettingsType) UnmarshalKey(key string, obj interface{}) error
- type SingleItemExpCache
- type SortItemItf
- type StopSignalOptFunc
- type Throttle
- type ThrottleCfg
- type Uint32Counter
Examples ¶
- AlertPusher
- AtomicFieldBool
- AutoGC
- ConfigSrv
- Counter
- DirSize
- ExpCache
- FIFO
- FallBack
- FlattenMap
- ForceGCBlocking
- ForceGCUnBlocking
- GZCompressor
- GeneratePasswordHash
- GetFuncName
- GetLargestNItems
- GetSmallestNItems
- HashSHA128String
- HashSHA256String
- HashXxhashString
- JWT
- Mutex
- PGZCompressor
- Race
- RegexNamedSubMatch
- RotateCounter
- RunWithTimeout
- SetStructFieldsBySlice
- SignByECDSAWithSHA256
- Throttle
- URLMasking
Constants ¶
const ( ANSIColorReset int = iota ANSIColorBold ANSIColorFaint ANSIColorItalic ANSIColorUnderline ANSIColorBlinkSlow ANSIColorBlinkRapid ANSIColorReverseVideo ANSIColorConcealed ANSIColorCrossedOut )
Base attributes
const ( ANSIColorFgBlack int = iota + 30 ANSIColorFgRed ANSIColorFgGreen ANSIColorFgYellow ANSIColorFgBlue ANSIColorFgMagenta ANSIColorFgCyan ANSIColorFgWhite )
Foreground text colors
const ( ANSIColorFgHiBlack int = iota + 90 ANSIColorFgHiRed ANSIColorFgHiGreen ANSIColorFgHiYellow ANSIColorFgHiBlue ANSIColorFgHiMagenta ANSIColorFgHiCyan ANSIColorFgHiWhite )
Foreground Hi-Intensity text colors
const ( ANSIColorBgBlack int = iota + 40 ANSIColorBgRed ANSIColorBgGreen ANSIColorBgYellow ANSIColorBgBlue ANSIColorBgMagenta ANSIColorBgCyan ANSIColorBgWhite )
Background text colors
const ( ANSIColorBgHiBlack int = iota + 100 ANSIColorBgHiRed ANSIColorBgHiGreen ANSIColorBgHiYellow ANSIColorBgHiBlue ANSIColorBgHiMagenta ANSIColorBgHiCyan ANSIColorBgHiWhite )
Background Hi-Intensity text colors
const ( // HTTPHeaderHost HTTP header name HTTPHeaderHost = "Host" // HTTPHeaderReferer HTTP header name HTTPHeaderReferer = "Referer" // HTTPHeaderContentType HTTP header name HTTPHeaderContentType = "Content-Type" // HTTPHeaderContentTypeValJSON HTTP header value HTTPHeaderContentTypeValJSON = "application/json" )
const ( // SampleRateDenominator sample rate = sample / SampleRateDenominator SampleRateDenominator = 1000 // LoggerLevelInfo Logger level info LoggerLevelInfo string = "info" // LoggerLevelDebug Logger level debug LoggerLevelDebug string = "debug" // LoggerLevelWarn Logger level warn LoggerLevelWarn string = "warn" // LoggerLevelError Logger level error LoggerLevelError string = "error" // LoggerLevelFatal Logger level fatal LoggerLevelFatal string = "fatal" // LoggerLevelPanic Logger level panic LoggerLevelPanic string = "panic" )
const ( LoggerEncodingConsole = "console" LoggerEncodingJSON = "json" )
const ( // TimeFormatDate "2006-01-02" TimeFormatDate = "2006-01-02" // Nano2Sec 1e9 Nano2Sec = 1e9 // BitSize64 64 BitSize64 = 64 // BaseHex 16 BaseHex = 16 )
const ANSIColorEscape = "\x1b"
ANSIColorEscape escape string for ANSI color
Variables ¶
var ( // SignMethodHS256 use HS256 for jwt SignMethodHS256 = jwt.SigningMethodHS256 // SignMethodES256 use ES256 for jwt SignMethodES256 = jwt.SigningMethodES256 SignMethodRS256 = jwt.SigningMethodRS256 )
var ( // ParseTs2UTC can parse unix timestamp(int64) to time.Time ParseTs2UTC = ParseUnix2UTC // ParseTs2String can parse unix timestamp(int64) to string ParseTs2String = ParseUnix2String )
var ( // ParseTs2Time can parse unix timestamp(int64) to time.Time ParseTs2Time = ParseTs2UTC // UnixNano2UTC convert unixnano to UTC time UnixNano2UTC = ParseUnixNano2UTC )
var ( // Clock high performance time utils, replace Clock1 Clock = NewClock(context.Background(), defaultClockInterval) // Clock2 high performance time utils Clock2 = Clock // NewClock2 create new Clock NewClock2 = NewClock )
var ( // TimeZoneUTC timezone UTC TimeZoneUTC = time.UTC // TimeZoneShanghai timezone Shanghai // TimeZoneShanghai = time.FixedZone("Asia/Shanghai", 8*3600) TimeZoneShanghai *time.Location )
var ( // ForceGC force to start gc blocking ForceGC = ForceGCBlocking // TriggerGC force to start gc unblocking TriggerGC = ForceGCUnBlocking )
var (
ErrAsyncTask = errors.New("async task error")
)
var (
// JSON effective json
JSON = json
)
var Settings = NewSettings()
Settings is the settings for this project
enhance viper.Viper with threadsafe and richer features.
Basic Usage
import gutils "github.com/Laisky/go-utils" gutils.Settings.
Functions ¶
func AESEncryptFilesInDir
deprecated
added in
v1.13.5
func AESEncryptFilesInDir(dir string, secret []byte, opts ...SettingsEncryptOptf) (err error)
AESEncryptFilesInDir encrypt files in dir
will generate new encrypted files with <append> before ext
xxx.toml -> xxx.enc.toml
Deprecated: use AESEncryptFilesInDir2 instead
func AESEncryptFilesInDir2 ¶ added in v1.16.0
func AESEncryptFilesInDir2(dir string, secret []byte, opts ...SettingsEncryptOptf) (err error)
AESEncryptFilesInDir2 encrypt files in dir
will generate new encrypted files with <suffix> after ext
xxx.toml -> xxx.toml.enc
func AbsInt32 ¶ added in v1.14.7
AbsInt32 abs(v)
ignore int exceeds limit error, abs(MinInt32) == MaxInt32
func AbsInt64 ¶ added in v1.14.7
AbsInt64 abs(v)
ignore int exceeds limit error, abs(MinInt64) == MaxInt64
func AddFileToZip ¶ added in v1.11.5
AddFileToZip add file tp zip.Writer
func AutoGC ¶ added in v1.10.2
AutoGC auto trigger GC when memory usage exceeds the custom ration
default to /sys/fs/cgroup/memory/memory.limit_in_bytes
Example ¶
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() if err := AutoGC( ctx, WithGCMemRatio(85), // default WithGCMemLimitFilePath("/sys/fs/cgroup/memory/memory.limit_in_bytes"), // default ); err != nil { Logger.Error("enable autogc", zap.Error(err)) }
Output:
func Base64Decode ¶ added in v1.13.0
Base64Decode decode string to bytes use base64
func Base64Encode ¶ added in v1.13.0
Base64Encode encode bytes to string use base64
func CloseQuietly ¶ added in v1.17.0
CloseQuietly closes `io.Closer` quietly, ignore errcheck linter
Example
defer CloseQuietly(fp)
func ConvertMap2StringKey ¶ added in v1.14.7
func ConvertMap2StringKey(inputMap interface{}) map[string]interface{}
ConvertMap2StringKey convert any map to `map[string]interface{}`
func DecodeECDSAPrivateKey ¶ added in v1.11.3
func DecodeECDSAPrivateKey(pemEncoded []byte) (*ecdsa.PrivateKey, error)
DecodeECDSAPrivateKey decode ecdsa private key from pem bytes
func DecodeECDSAPublicKey ¶ added in v1.11.3
DecodeECDSAPublicKey decode ecdsa public key from pem bytes
func DecodeES256SignByBase64 ¶ added in v1.12.3
DecodeES256SignByBase64 parse ecdsa signature string to two *big.Int
func DecodeES256SignByHex ¶ added in v1.12.3
DecodeES256SignByHex parse ecdsa signature string to two *big.Int
func DecodeRSAPrivateKey ¶ added in v1.13.0
func DecodeRSAPrivateKey(pemEncoded []byte) (*rsa.PrivateKey, error)
DecodeRSAPrivateKey decode rsa private key from pem bytes
func DecodeRSAPublicKey ¶ added in v1.13.0
DecodeRSAPublicKey decode rsa public key from pem bytes
func DecryptByAes ¶ added in v1.12.7
DecryptByAes encrypt bytes by aes with key
inspired by https://tutorialedge.net/golang/go-encrypt-decrypt-aes-tutorial/
func Dedent ¶ added in v1.16.0
func Dedent(v string, optfs ...DedentOptFunc) string
Dedent removes leading whitespace or tab from the beginning of each line
will replace all tab to 4 blanks.
func DeepClone ¶ added in v1.16.0
func DeepClone(src interface{}) (dst interface{})
DeepClone deep clone a struct
will ignore all unexported fields
func DirSize ¶ added in v1.10.1
DirSize calculate directory size. https://stackoverflow.com/a/32482941/2368737
Example ¶
dirPath := "." size, err := DirSize(dirPath) if err != nil { Logger.Error("get dir size", zap.Error(err), zap.String("path", dirPath)) } Logger.Info("got size", zap.Int64("size", size), zap.String("path", dirPath))
Output:
func EncodeECDSAPrivateKey ¶ added in v1.11.3
func EncodeECDSAPrivateKey(privateKey *ecdsa.PrivateKey) ([]byte, error)
EncodeECDSAPrivateKey encode ecdsa private key to pem bytes
func EncodeECDSAPublicKey ¶ added in v1.11.3
EncodeECDSAPublicKey encode ecdsa public key to pem bytes
func EncodeES256SignByBase64 ¶ added in v1.12.3
EncodeES256SignByBase64 format ecdsa signature to stirng
func EncodeES256SignByHex ¶ added in v1.12.3
EncodeES256SignByHex format ecdsa sign to stirng
func EncodeRSAPrivateKey ¶ added in v1.13.0
func EncodeRSAPrivateKey(privateKey *rsa.PrivateKey) ([]byte, error)
EncodeRSAPrivateKey encode rsa private key to pem bytes
func EncodeRSAPublicKey ¶ added in v1.13.0
EncodeRSAPublicKey encode rsa public key to pem bytes
func EncryptByAes ¶ added in v1.13.4
EncryptByAes encrypt bytes by aes with key
inspired by https://tutorialedge.net/golang/go-encrypt-decrypt-aes-tutorial/
func FallBack ¶
func FallBack(orig func() interface{}, fallback interface{}) (ret interface{})
FallBack return the fallback when orig got error utils.FallBack(func() interface{} { return getIOStatMetric(fs) }, &IOStat{}).(*IOStat)
Example ¶
targetFunc := func() interface{} { panic("someting wrong") } FallBack(targetFunc, 10) // got 10
Output:
func FlattenMap ¶
FlattenMap make embedded map into flatten map
Example ¶
data := map[string]interface{}{ "a": "1", "b": map[string]interface{}{ "c": 2, "d": map[string]interface{}{ "e": 3, }, }, } FlattenMap(data, "__") fmt.Println(data)
Output: map[a:1 b__c:2 b__d__e:3]
func ForceGCBlocking ¶ added in v1.7.4
func ForceGCBlocking()
ForceGCBlocking force to run blocking manual gc.
Example ¶
ForceGCBlocking()
Output:
func ForceGCUnBlocking ¶ added in v1.7.4
func ForceGCUnBlocking()
ForceGCUnBlocking trigger GC unblocking
Example ¶
ForceGCUnBlocking()
Output:
func FormatBig2Base64 ¶ added in v1.12.6
FormatBig2Base64 format big to base64 string
func FormatBig2Hex ¶ added in v1.11.4
FormatBig2Hex format big to hex string
func GeneratePasswordHash ¶ added in v1.2.0
GeneratePasswordHash generate hashed password by origin password
Example ¶
// generate hashed password rawPassword := []byte("1234567890") hashedPassword, err := GeneratePasswordHash(rawPassword) if err != nil { Logger.Error("try to generate password got error", zap.Error(err)) return } fmt.Printf("got new hashed pasword: %v\n", string(hashedPassword)) // validate passowrd if !ValidatePasswordHash(hashedPassword, rawPassword) { Logger.Error("password invalidate", zap.Error(err)) return }
Output:
func GetFuncName ¶
func GetFuncName(f interface{}) string
GetFuncName return the name of func
Example ¶
GetFuncName(testFoo) // "github.com/Laisky/go-utils.testFoo"
Output:
func GetStructFieldByName ¶ added in v1.14.3
func GetStructFieldByName(st interface{}, fieldName string) interface{}
GetStructFieldByName get struct field by name
func GracefulCancel ¶ added in v1.17.1
func GracefulCancel(cancel func())
GracefulCancel is a function that will be called when the process is about to be terminated.
func HTTPInvalidStatusError ¶
HTTPInvalidStatusError return error about status code
func HasField ¶ added in v1.17.0
HasField check is struct has field
inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/
func HasMethod ¶ added in v1.17.0
HasMethod check is struct has method
inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/
func HashSHA128String ¶ added in v1.10.2
HashSHA128String calculate string's hash by sha256
Example ¶
val := testhashraw got := HashSHA128String(val) Logger.Info("hash", zap.String("got", got))
Output:
func HashSHA256String ¶ added in v1.10.1
HashSHA256String calculate string's hash by sha256
Example ¶
val := testhashraw got := HashSHA256String(val) Logger.Info("hash", zap.String("got", got))
Output:
func HashXxhashString ¶ added in v1.10.1
HashXxhashString calculate string's hash by sha256
Example ¶
val := testhashraw got := HashXxhashString(val) Logger.Info("hash", zap.String("got", got))
Output:
func HumanReadableByteCount ¶ added in v1.14.7
HumanReadableByteCount convert bytes to human readable string
Args:
- bytes:
- si: `si ? 1024 : 1000`
Example:
`HumanReadableByteCount(1005, false) -> "1.01KB"`
func InArray ¶ added in v1.13.10
func InArray(collection interface{}, ele interface{}) bool
InArray if collection contains ele
func IsDirWritable ¶ added in v1.13.9
IsDirWritable if dir is writable
func IsHasField
deprecated
added in
v1.12.2
IsHasField check is struct has field
inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/
Deprecated: use HasField instead
func IsHasMethod
deprecated
added in
v1.12.2
IsHasMethod check is struct has method
inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/
Deprecated: use HasMethod instead
func IsRemoteUDPPortOpen ¶ added in v1.14.3
IsRemoteUDPPortOpen check is remote udp port open. return err if remote port is not open.
Args:
addr: "scanme.nmap.org:53"
func JumpHash ¶ added in v1.15.0
JumpHash fatest consistent hashing created by google. inspired by https://medium.com/@dgryski/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8
func ListFilesInDir ¶ added in v1.13.5
ListFilesInDir list files in dir
func MoveFile ¶ added in v1.13.4
MoveFile move file from src to dst by copy
sometimes move file by `rename` not work. for example, you can not move file between docker volumes by `rename`.
func NewHTTPClient ¶ added in v1.12.8
func NewHTTPClient(opts ...HTTPClientOptFunc) (c *http.Client, err error)
NewHTTPClient create http client
func NewSkiplist ¶ added in v1.15.0
NewSkiplist new skiplist
func NewTmpFileForContent ¶ added in v1.17.1
NewTmpFileForContent write content to tmp file and return path
func NilInterface ¶ added in v1.16.0
func NilInterface(data interface{}) bool
NilInterface make sure data is nil interface or another type with nil value
Example:
type foo struct{} var f *foo var v interface{} v = f v == nil // false NilInterface(v) // true
func ParseBase642Big ¶ added in v1.12.6
ParseBase642Big parse base64 string to big
func ParseHex2Big ¶ added in v1.11.4
ParseHex2Big parse hex string to big
func ParseHex2UTC ¶ added in v1.8.0
ParseHex2UTC parse hex to UTC time
func ParseHexNano2UTC ¶ added in v1.8.0
ParseHexNano2UTC parse hex contains nano to UTC time
func ParseJWTTokenWithoutValidate ¶ added in v1.10.0
ParseJWTTokenWithoutValidate parse and get payload without validate jwt token
func ParseLoggerLevel ¶ added in v1.15.0
ParseLoggerLevel
func ParseUnix2String ¶ added in v1.8.0
ParseUnix2String can parse unix timestamp(int64) to string
func ParseUnix2UTC ¶ added in v1.8.0
ParseUnix2UTC convert unix to UTC time
func ParseUnixNano2UTC ¶ added in v1.8.0
ParseUnixNano2UTC convert unixnano to UTC time
func Race ¶ added in v1.17.0
func Race(gs ...func())
Race return when any goroutine returned
Example ¶
startAt := time.Now() Race( func() { time.Sleep(time.Millisecond) }, func() { time.Sleep(time.Second) }, func() { time.Sleep(time.Minute) }, ) fmt.Println(time.Since(startAt) < time.Second)
Output: true
func RaceWithCtx ¶ added in v1.17.0
RaceWithCtx return when any goroutine returned or ctx canceled
func RandomStringWithLength ¶
RandomStringWithLength generate random string with specific length
func RegexNamedSubMatch ¶
RegexNamedSubMatch extract key:val map from string by group match
Example ¶
reg := regexp.MustCompile(`(?P<key>\d+.*)`) str := "12345abcde" groups := map[string]string{} if err := RegexNamedSubMatch(reg, str, groups); err != nil { Logger.Error("try to group match got error", zap.Error(err)) } fmt.Println(groups)
Output: map[key:12345abcde]
func RemoveEmpty ¶ added in v1.13.10
RemoveEmpty remove duplicate string in slice
func RequestJSON ¶
func RequestJSON(method, url string, request *RequestData, resp interface{}) (err error)
RequestJSON request JSON and return JSON by default client
func RequestJSONWithClient ¶
func RequestJSONWithClient(httpClient *http.Client, method, url string, request *RequestData, resp interface{}, ) (err error)
RequestJSONWithClient request JSON and return JSON with specific client
func RunWithTimeout ¶ added in v1.17.0
RunWithTimeout run func with timeout
Example ¶
slow := func() { time.Sleep(10 * time.Second) } startAt := time.Now() RunWithTimeout(5*time.Millisecond, slow) fmt.Println(time.Since(startAt) < 10*time.Second)
Output: true
func SecRandInt ¶ added in v1.14.3
SecRandInt generate security int
func SecRandomStringWithLength ¶ added in v1.14.3
SecRandomStringWithLength generate random string with specific length
func SetInternalClock ¶ added in v1.15.0
SetInternalClock set internal Clock with refresh interval
func SetStructFieldsBySlice ¶ added in v1.11.1
func SetStructFieldsBySlice(structs, vals interface{}) (err error)
SetStructFieldsBySlice set field value of structs slice by values slice
Example ¶
type ST struct{ A, B string } var ( err error ss = []*ST{{}, {}} vs = [][]string{ {"x0", "y0"}, {"x1", "y1"}, } ) if err = SetStructFieldsBySlice(ss, vs); err != nil { Logger.Error("set struct val", zap.Error(err)) return } fmt.Printf("%+v\n", ss) // ss = []*ST{{A: "x0", B: "y0"}, {A: "x1", B: "y1"}}
Output:
func SignByECDSAWithSHA256 ¶ added in v1.11.3
SignByECDSAWithSHA256 generate signature by ecdsa private key use sha256
Example ¶
priKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { Logger.Panic("generate key", zap.Error(err)) } priKey2, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { Logger.Panic("generate key", zap.Error(err)) } // case: correct key cnt := []byte("fjijf23lijfl23ijrl32jra9pfie9wpfi") r, s, err := SignByECDSAWithSHA256(priKey, cnt) if err != nil { Logger.Panic("sign", zap.Error(err)) } if !VerifyByECDSAWithSHA256(&priKey.PublicKey, cnt, r, s) { Logger.Panic("verify failed") } // generate string encoded := EncodeES256SignByBase64(r, s) if _, _, err = DecodeES256SignByBase64(encoded); err != nil { Logger.Panic("encode and decode", zap.Error(err)) } // case: incorrect cnt cnt = []byte("fjijf23lijfl23ijrl32jra9pfie9wpfi") r, s, err = SignByECDSAWithSHA256(priKey, cnt) if err != nil { Logger.Panic("sign", zap.Error(err)) } if VerifyByECDSAWithSHA256(&priKey.PublicKey, append(cnt, '2'), r, s) { Logger.Panic("should not verify") } // case: incorrect key r, s, err = SignByECDSAWithSHA256(priKey2, cnt) if err != nil { Logger.Panic("sign", zap.Error(err)) } if VerifyByECDSAWithSHA256(&priKey.PublicKey, cnt, r, s) { Logger.Panic("should not verify") }
Output:
func SignByRSAWithSHA256 ¶ added in v1.13.0
func SignByRSAWithSHA256(priKey *rsa.PrivateKey, content []byte) ([]byte, error)
SignByRSAWithSHA256 generate signature by rsa private key use sha256
func SignReaderByECDSAWithSHA256 ¶ added in v1.11.4
func SignReaderByECDSAWithSHA256(priKey *ecdsa.PrivateKey, reader io.Reader) (r, s *big.Int, err error)
SignReaderByECDSAWithSHA256 generate signature by ecdsa private key use sha256
func SignReaderByRSAWithSHA256 ¶ added in v1.13.0
SignReaderByRSAWithSHA256 generate signature by rsa private key use sha256
func SleepWithContext ¶ added in v1.17.0
SleepWithContext sleep duration with context, if context is done, return
func StopSignal ¶ added in v1.14.8
func StopSignal(optfs ...StopSignalOptFunc) (stopCh <-chan struct{})
StopSignal registered for SIGTERM and SIGINT. A stop channel is returned which is closed on one of these signals. If a second signal is caught, the program is terminated with exit code 1.
Copied from https://github.com/kubernetes/sample-controller
func TemplateWithMap ¶ added in v1.5.4
TemplateWithMap replace `${var}` in template string
func TemplateWithMapAndRegexp ¶ added in v1.5.4
func TemplateWithMapAndRegexp(tplReg *regexp.Regexp, tpl string, data map[string]interface{}) string
TemplateWithMapAndRegexp replace `${var}` in template string
func TrimEleSpaceAndRemoveEmpty ¶ added in v1.13.10
TrimEleSpaceAndRemoveEmpty remove duplicate string in slice
func URLMasking ¶ added in v1.9.3
URLMasking masking password in url
Example ¶
originURL := "http://12ijij:3j23irj@jfjlwef.ffe.com" newURL := URLMasking(originURL, "*****") fmt.Println(newURL)
Output: http://12ijij:*****@jfjlwef.ffe.com
func UniqueStrings ¶ added in v1.11.2
UniqueStrings remove duplicate string in slice
func Unzip ¶ added in v1.11.5
Unzip will decompress a zip archive, moving all files and folders within the zip file (parameter 1) to an output directory (parameter 2).
func ValidateFileHash ¶ added in v1.12.1
ValidateFileHash validate file content with hashed string
Args:
- filepath: file path to check
- hashed: hashed string, like `sha256: xxxx`
func ValidatePasswordHash ¶ added in v1.2.0
ValidatePasswordHash validate password is match with hashedPassword
func VerifyByECDSAWithSHA256 ¶ added in v1.11.3
VerifyByECDSAWithSHA256 verify signature by ecdsa public key use sha256
func VerifyByRSAWithSHA256 ¶ added in v1.13.0
VerifyByRSAWithSHA256 verify signature by rsa public key use sha256
func VerifyReaderByECDSAWithSHA256 ¶ added in v1.11.4
func VerifyReaderByECDSAWithSHA256(pubKey *ecdsa.PublicKey, reader io.Reader, r, s *big.Int) (bool, error)
VerifyReaderByECDSAWithSHA256 verify signature by ecdsa public key use sha256
func VerifyReaderByRSAWithSHA256 ¶ added in v1.13.0
VerifyReaderByRSAWithSHA256 verify signature by rsa public key use sha256
Types ¶
type AesReaderWrapper ¶ added in v1.13.4
type AesReaderWrapper struct {
// contains filtered or unexported fields
}
AesReaderWrapper used to decrypt encrypted reader
func NewAesReaderWrapper ¶ added in v1.13.4
func NewAesReaderWrapper(in io.Reader, key []byte) (*AesReaderWrapper, error)
NewAesReaderWrapper wrap reader by aes
type AlertHookOptFunc ¶ added in v1.10.0
type AlertHookOptFunc func(*alertHookOption)
AlertHookOptFunc option for create AlertHook
func WithAlertHookLevel ¶ added in v1.9.0
func WithAlertHookLevel(level zapcore.Level) AlertHookOptFunc
WithAlertHookLevel level to trigger AlertHook
func WithAlertPushTimeout ¶ added in v1.9.0
func WithAlertPushTimeout(timeout time.Duration) AlertHookOptFunc
WithAlertPushTimeout set AlertPusher HTTP timeout
type AlertPusher ¶ added in v1.9.0
type AlertPusher struct {
// contains filtered or unexported fields
}
AlertPusher send alert to laisky's alert API
https://github.com/Laisky/laisky-blog-graphql/tree/master/telegram
Example ¶
pusher, err := NewAlertPusherWithAlertType( context.Background(), "https://blog.laisky.com/graphql/query/", "hello", "rwkpVuAgaBZQBASKndHK", ) if err != nil { Logger.Panic("create alert pusher", zap.Error(err)) } defer pusher.Close() logger := Logger.WithOptions( zap.Fields(zap.String("logger", "test")), zap.HooksWithFields(pusher.GetZapHook()), ) logger.Debug("DEBUG", zap.String("yo", "hello")) logger.Info("Info", zap.String("yo", "hello")) logger.Warn("Warn", zap.String("yo", "hello")) logger.Error("Error", zap.String("yo", "hello")) time.Sleep(1 * time.Second)
Output:
func NewAlertPusher ¶ added in v1.9.0
func NewAlertPusher(ctx context.Context, pushAPI string, opts ...AlertHookOptFunc) (a *AlertPusher, err error)
NewAlertPusher create new AlertPusher
func NewAlertPusherWithAlertType ¶ added in v1.9.0
func NewAlertPusherWithAlertType(ctx context.Context, pushAPI string, alertType, pushToken string, opts ...AlertHookOptFunc, ) (a *AlertPusher, err error)
NewAlertPusherWithAlertType create new AlertPusher with default type and token
func (*AlertPusher) GetZapHook ¶ added in v1.10.1
GetZapHook get hook for zap logger
func (*AlertPusher) Send ¶ added in v1.9.0
func (a *AlertPusher) Send(msg string) (err error)
Send send with default alertType and pushToken
func (*AlertPusher) SendWithType ¶ added in v1.9.0
func (a *AlertPusher) SendWithType(alertType, pushToken, msg string) (err error)
SendWithType send alert with specific type, token and msg
type AsyncTask ¶ added in v1.17.0
type AsyncTask interface { // ID get task id ID() string // Status get task status, pending/done/failed Status() AsyncTaskStatus // SetDone set task done with result data SetDone(ctx context.Context, data string) (err error) // SetError set task error with err message SetError(ctx context.Context, errMsg string) (err error) }
asyncTask async task
func NewAsyncTask ¶ added in v1.17.0
func NewAsyncTask(ctx context.Context, store AsyncTaskStore) (AsyncTask, error)
NewTask new async task
type AsyncTaskResult ¶ added in v1.17.0
type AsyncTaskResult struct { TaskID string `json:"task_id"` Status AsyncTaskStatus `json:"status"` Data string `json:"data"` Err string `json:"err"` }
AsyncTaskResult result of async task
type AsyncTaskStatus ¶ added in v1.17.0
type AsyncTaskStatus string
const ( // AsyncTaskStatusPending task pending AsyncTaskStatusPending AsyncTaskStatus = "pending" // AsyncTaskStatusDone task done AsyncTaskStatusDone AsyncTaskStatus = "done" // AsyncTaskStatusFailed task failed AsyncTaskStatusFailed AsyncTaskStatus = "failed" )
func (AsyncTaskStatus) String ¶ added in v1.17.1
func (s AsyncTaskStatus) String() string
type AsyncTaskStore ¶ added in v1.17.0
type AsyncTaskStore interface { // New create new AsyncTaskResult with id New(ctx context.Context) (result *AsyncTaskResult, err error) // Set set AsyncTaskResult Set(ctx context.Context, taskID string, result *AsyncTaskResult) (err error) // Heartbeat refresh async task's updated time to mark this task is still alive Heartbeat(ctx context.Context, taskID string) (alived bool, err error) }
AsyncTaskStore persistency storage for async task
type AtomicFieldBool ¶ added in v1.16.0
type AtomicFieldBool struct {
// contains filtered or unexported fields
}
AtomicFieldBool is a bool field which is goroutine-safe
Example ¶
type foo struct { v AtomicFieldBool } f := new(foo) f.v.SetTrue() fmt.Println(f.v.True())
Output: true
func (*AtomicFieldBool) SetFalse ¶ added in v1.16.0
func (a *AtomicFieldBool) SetFalse()
SetFalse set false
func (*AtomicFieldBool) SetTrue ¶ added in v1.16.0
func (a *AtomicFieldBool) SetTrue()
SetTrue set true
func (*AtomicFieldBool) True ¶ added in v1.16.0
func (a *AtomicFieldBool) True() bool
True value == true
type ChildParallelCounter ¶ added in v1.6.3
ChildParallelCounter child of ParallelCounter
func (*ChildParallelCounter) Count ¶ added in v1.6.3
func (c *ChildParallelCounter) Count() (r int64)
Count count 1
func (*ChildParallelCounter) CountN ¶ added in v1.6.3
func (c *ChildParallelCounter) CountN(n int64) (r int64)
CountN count n
func (*ChildParallelCounter) Get ¶ added in v1.6.3
func (c *ChildParallelCounter) Get() int64
Get get current count
type Clock2Type ¶ added in v1.7.3
type Clock2Type ClockType
Clock2Type high performance clock with lazy refreshing
type ClockItf ¶ added in v1.7.3
type ClockItf interface { GetTimeInRFC3339Nano() string GetUTCNow() time.Time SetupInterval(time.Duration) Interval() time.Duration Close() }
ClockItf high performance lazy clock
type ClockType ¶
ClockType high performance clock with lazy refreshing
func (*ClockType) GetNanoTimeInHex ¶ added in v1.8.0
GetNanoTimeInHex return current time with nano in hex
func (*ClockType) GetTimeInHex ¶ added in v1.8.0
GetTimeInHex return current time in hex
func (*ClockType) GetTimeInRFC3339Nano ¶
GetTimeInRFC3339Nano return Clock current time in string
func (*ClockType) SetInterval ¶ added in v1.14.3
SetInterval setup update interval
type CompressOptFunc ¶ added in v1.10.0
type CompressOptFunc func(*compressOption) error
CompressOptFunc options for compressor
func WithCompressBufSizeByte ¶ added in v1.10.0
func WithCompressBufSizeByte(n int) CompressOptFunc
WithCompressBufSizeByte set compressor buf size
func WithCompressLevel ¶ added in v1.10.0
func WithCompressLevel(n int) CompressOptFunc
WithCompressLevel set compressor compress level
func WithPGzipBlockSize ¶ added in v1.10.0
func WithPGzipBlockSize(bytes int) CompressOptFunc
WithPGzipBlockSize set compressor blocks
func WithPGzipNBlocks ¶ added in v1.10.0
func WithPGzipNBlocks(nBlock int) CompressOptFunc
WithPGzipNBlocks set compressor blocks
type CompressorItf ¶ added in v1.10.0
type CompressorItf interface { Write([]byte) (int, error) WriteString(string) (int, error) // write footer and flust to lower writer Flush() error WriteFooter() error }
CompressorItf interface of compressor
type Config ¶
type Config struct { Name string `json:"name"` Profiles []string `json:"profiles"` Label string `json:"label"` Version string `json:"version"` Sources []*ConfigSource `json:"propertySources"` }
Config whole configuation return by config-server
type ConfigSource ¶
type ConfigSource struct { Name string `json:"name"` Source map[string]interface{} `json:"source"` }
ConfigSource config item in config-server
type ConfigSrv ¶
type ConfigSrv struct { RemoteCfg *Config // contains filtered or unexported fields }
ConfigSrv can load configuration from Spring-Cloud-Config-Server
Example ¶
var ( url = "http://config-server.un.org" app = "appname" profile = "sit" label = "master" ) c := NewConfigSrv(url, app, profile, label) c.Get("management.context-path") c.GetString("management.context-path") c.GetBool("endpoints.health.sensitive") c.GetInt("spring.cloud.config.retry")
Output:
func NewConfigSrv ¶
NewConfigSrv create ConfigSrv
type Counter ¶
Counter int64 counter
Example ¶
counter := NewCounter() counter.Count() counter.CountN(10) counter.Get() // get current count
Output:
func NewCounterFromN ¶
NewCounterFromN create Counter from custom number
type DedentOptFunc ¶ added in v1.16.0
type DedentOptFunc func(opt *dedentOpt)
DedentOptFunc dedent option
func WithReplaceTabBySpaces ¶ added in v1.16.0
func WithReplaceTabBySpaces(spaces int) DedentOptFunc
WithReplaceTabBySpaces replace tab to spaces
type Deque ¶ added in v1.17.0
type Deque interface { PushBack(interface{}) PushFront(interface{}) PopFront() interface{} PopBack() interface{} Len() int Front() interface{} Back() interface{} }
Deque
https://pkg.go.dev/github.com/gammazero/deque#Deque
func NewDeque ¶ added in v1.17.0
func NewDeque(optfs ...DequeOptFunc) (Deque, error)
NewDeque new deque
type DequeOptFunc ¶ added in v1.17.0
type DequeOptFunc func(*dequeOpt) error
DequeOptFunc optional arguments for deque
func WithDequeCurrentCapacity ¶ added in v1.17.0
func WithDequeCurrentCapacity(size int) DequeOptFunc
WithDequeCurrentCapacity preallocate memory for deque
func WithDequeMinimalCapacity ¶ added in v1.17.0
func WithDequeMinimalCapacity(size int) DequeOptFunc
WithDequeMinimalCapacity set deque minimal capacity
type EmailDialer ¶ added in v1.17.0
EmailDialer create gomail.Dialer
type ExpCache ¶ added in v1.13.11
type ExpCache struct {
// contains filtered or unexported fields
}
ExpCache cache with expires
can Store/Load like map
Example ¶
cc := NewExpCache(context.Background(), 100*time.Millisecond) cc.Store("key", "val") cc.Load("key") // return "val" // data expired time.Sleep(200 * time.Millisecond) data, ok := cc.Load("key") fmt.Println(data) fmt.Println(ok)
Output: <nil> false
func NewExpCache ¶ added in v1.13.11
NewExpCache new cache manager
func (*ExpCache) Delete ¶ added in v1.15.0
func (c *ExpCache) Delete(key interface{})
Delete remove key
type ExpiredRLock ¶ added in v1.14.1
type ExpiredRLock struct {
// contains filtered or unexported fields
}
ExpiredRLock Lock with expire time
func NewExpiredRLock ¶ added in v1.14.1
NewExpiredRLock new ExpiredRLock
type FIFO ¶ added in v1.15.0
type FIFO struct {
// contains filtered or unexported fields
}
FIFO is a lock-free First-In-First-Out queue
paper: https://1drv.ms/b/s!Au45o0W1gVVLuNxYkPzfBo4fOssFPQ?e=TYxHKl
Example ¶
f := NewFIFO() f.Put(1) v := f.Get() if v == nil { panic(v) } fmt.Println(v.(int))
Output: 1
type GZCompressor ¶ added in v1.6.0
type GZCompressor struct {
// contains filtered or unexported fields
}
GZCompressor compress by gz with buf
Example ¶
originText := testCompressraw writer := &bytes.Buffer{} var err error // writer c, err := NewGZCompressor( writer, WithCompressLevel(defaultGzCompressLevel), // default WithCompressBufSizeByte(defaultCompressBufSizeByte), // default ) if err != nil { Logger.Error("new compressor", zap.Error(err)) return } if _, err = c.WriteString(originText); err != nil { Logger.Error("write string to compressor", zap.Error(err)) return } if err = c.Flush(); err != nil { Logger.Error("flush compressor", zap.Error(err)) return } // reader var gz *gzip.Reader if gz, err = gzip.NewReader(writer); err != nil { Logger.Error("new compressor", zap.Error(err)) return } var bs []byte if bs, err = ioutil.ReadAll(gz); err != nil { Logger.Error("read from compressor", zap.Error(err)) return } got := string(bs) if got != originText { Logger.Error("extract compressed text invalidate", zap.String("got", got), zap.ByteString("expect", bs)) return }
Output:
func NewGZCompressor ¶ added in v1.6.0
func NewGZCompressor(writer io.Writer, opts ...CompressOptFunc) (c *GZCompressor, err error)
NewGZCompressor create new GZCompressor
func (*GZCompressor) Flush ¶ added in v1.6.0
func (c *GZCompressor) Flush() (err error)
Flush flush buffer bytes into bottom writer with gz meta footer
func (*GZCompressor) Write ¶ added in v1.6.0
func (c *GZCompressor) Write(d []byte) (int, error)
Write write bytes via compressor
func (*GZCompressor) WriteFooter ¶ added in v1.6.2
func (c *GZCompressor) WriteFooter() (err error)
WriteFooter write gz footer
func (*GZCompressor) WriteString ¶ added in v1.6.0
func (c *GZCompressor) WriteString(d string) (int, error)
WriteString write string via compressor
type GcOptFunc ¶ added in v1.10.2
type GcOptFunc func(*gcOption) error
GcOptFunc option for GC utils
func WithGCMemLimitFilePath ¶ added in v1.10.2
WithGCMemLimitFilePath set memory limit file
type HTTPClientOptFunc ¶ added in v1.13.0
type HTTPClientOptFunc func(*httpClientOption) error
HTTPClientOptFunc http client options
func WithHTTPClientInsecure ¶ added in v1.12.3
func WithHTTPClientInsecure() HTTPClientOptFunc
WithHTTPClientInsecure set http client igonre ssl issue
default to false
func WithHTTPClientMaxConn ¶ added in v1.12.3
func WithHTTPClientMaxConn(maxConn int) HTTPClientOptFunc
WithHTTPClientMaxConn set http client max connection
default to 20
func WithHTTPClientTimeout ¶ added in v1.12.3
func WithHTTPClientTimeout(timeout time.Duration) HTTPClientOptFunc
WithHTTPClientTimeout set http client timeout
default to 30s
type HeapItemItf ¶ added in v1.15.0
type HeapItemItf interface { GetKey() interface{} GetPriority() int }
HeapItemItf items need to sort
func GetLargestNItems ¶ added in v1.15.0
func GetLargestNItems(inputChan <-chan HeapItemItf, topN int) ([]HeapItemItf, error)
GetLargestNItems get N highest priority items
Example ¶
var ( itemsWaitToSort = HeapSlice{ &heapItem{p: 1}, &heapItem{p: 3}, &heapItem{p: 55}, &heapItem{p: 2}, &heapItem{p: 4441}, &heapItem{p: 15555}, &heapItem{p: 122}, } itemChan = make(chan HeapItemItf) ) go func() { for _, item := range itemsWaitToSort { itemChan <- item } close(itemChan) }() items, err := GetLargestNItems(itemChan, 3) if err != nil { panic(err) } for _, item := range items { // 15555 // 4441 // 112 fmt.Println(item.GetPriority()) }
Output:
func GetSmallestNItems ¶ added in v1.15.0
func GetSmallestNItems(inputChan <-chan HeapItemItf, topN int) ([]HeapItemItf, error)
GetSmallestNItems get N smallest priority items
Example ¶
var ( itemsWaitToSort = HeapSlice{ &heapItem{p: 1}, &heapItem{p: 3}, &heapItem{p: 55}, &heapItem{p: 2}, &heapItem{p: 4441}, &heapItem{p: 15555}, &heapItem{p: 122}, } itemChan = make(chan HeapItemItf) ) go func() { for _, item := range itemsWaitToSort { itemChan <- item } close(itemChan) }() items, err := GetSmallestNItems(itemChan, 3) if err != nil { panic(err) } for _, item := range items { // 1 // 2 // 3 fmt.Println(item.GetPriority()) }
Output:
func GetTopKItems ¶ added in v1.15.0
func GetTopKItems(inputChan <-chan HeapItemItf, topN int, isHighest bool) ([]HeapItemItf, error)
GetTopKItems calculate topN by heap
- use min-heap to calculates topN Highest items.
- use max-heap to calculates topN Lowest items.
type HeapSlice ¶ added in v1.15.0
type HeapSlice []HeapItemItf
type Int64CounterItf ¶ added in v1.7.8
Int64CounterItf counter for int64
type JWT ¶
type JWT struct {
// contains filtered or unexported fields
}
JWT is token utils that support HS256/ES256
Example ¶
secret = []byte("4738947328rh3ru23f32hf238f238fh28f") j, err := NewJWT( WithJWTSignMethod(SignMethodHS256), WithJWTSecretByte(secret), ) if err != nil { Logger.Panic("new jwt", zap.Error(err)) } type jwtClaims struct { jwt.RegisteredClaims } claims := &jwtClaims{ jwt.RegisteredClaims{ Subject: "laisky", }, } // signing token, err := j.Sign(claims) if err != nil { Logger.Panic("sign jwt", zap.Error(err)) } // verify claims = &jwtClaims{} if err := j.ParseClaims(token, claims); err != nil { Logger.Panic("sign jwt", zap.Error(err)) }
Output:
func NewJWT ¶ added in v1.3.3
func NewJWT(opts ...JWTOptFunc) (e *JWT, err error)
NewJWT create new JWT utils
func (*JWT) ParseClaims ¶ added in v1.12.0
func (e *JWT) ParseClaims(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
ParseClaims parse token to claims
func (*JWT) ParseClaimsByES256 ¶ added in v1.12.0
func (e *JWT) ParseClaimsByES256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
ParseClaimsByES256 parse token to claims by ES256
func (*JWT) ParseClaimsByHS256 ¶ added in v1.12.0
func (e *JWT) ParseClaimsByHS256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
ParseClaimsByHS256 parse token to claims by HS256
func (*JWT) ParseClaimsByRS256 ¶ added in v1.17.0
func (e *JWT) ParseClaimsByRS256(token string, claimsPtr jwt.Claims, opts ...JWTDiviceOptFunc) error
ParseClaimsByRS256 parse token to claims by rs256
func (*JWT) Sign ¶ added in v1.12.0
func (e *JWT) Sign(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
Sign sign claims to token
func (*JWT) SignByES256 ¶ added in v1.12.0
func (e *JWT) SignByES256(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
SignByES256 signing claims by ES256
func (*JWT) SignByHS256 ¶ added in v1.12.0
func (e *JWT) SignByHS256(claims jwt.Claims, opts ...JWTDiviceOptFunc) (string, error)
SignByHS256 signing claims by HS256
type JWTDiviceOptFunc ¶ added in v1.12.0
type JWTDiviceOptFunc func(*jwtDivideOpt) error
JWTDiviceOptFunc options to use separate secret for every user in parsing/signing
func WithJWTDividePriKey ¶ added in v1.12.0
func WithJWTDividePriKey(priKey []byte) JWTDiviceOptFunc
WithJWTDividePriKey set asymmetrical private key for each signning/verify
func WithJWTDividePubKey ¶ added in v1.12.0
func WithJWTDividePubKey(pubKey []byte) JWTDiviceOptFunc
WithJWTDividePubKey set asymmetrical public key for each signning/verify
func WithJWTDivideSecret ¶ added in v1.12.0
func WithJWTDivideSecret(secret []byte) JWTDiviceOptFunc
WithJWTDivideSecret set symmetric key for each signning/verify
type JWTOptFunc ¶ added in v1.10.0
JWTOptFunc options to setup JWT
func WithJWTPriKeyByte ¶ added in v1.12.0
func WithJWTPriKeyByte(prikey []byte) JWTOptFunc
WithJWTPriKeyByte set jwt asymmetrical private key
func WithJWTPubKeyByte ¶ added in v1.12.0
func WithJWTPubKeyByte(pubkey []byte) JWTOptFunc
WithJWTPubKeyByte set jwt asymmetrical public key
func WithJWTSecretByte ¶ added in v1.12.0
func WithJWTSecretByte(secret []byte) JWTOptFunc
WithJWTSecretByte set jwt symmetric signning key
func WithJWTSignMethod ¶ added in v1.10.0
func WithJWTSignMethod(method jwt.SigningMethod) JWTOptFunc
WithJWTSignMethod set jwt signing method
type LRUExpiredMap ¶ added in v1.15.0
type LRUExpiredMap struct {
// contains filtered or unexported fields
}
LRUExpiredMap map with expire time, auto delete expired item.
`Get` will auto refresh item's expires.
func NewLRUExpiredMap ¶ added in v1.15.0
func NewLRUExpiredMap(ctx context.Context, ttl time.Duration, new func() interface{}) (el *LRUExpiredMap, err error)
NewLRUExpiredMap new ExpiredMap
func (*LRUExpiredMap) Get ¶ added in v1.15.0
func (e *LRUExpiredMap) Get(key string) interface{}
Get get item
will auto refresh key's ttl
type LimitSizeHeap ¶ added in v1.15.0
type LimitSizeHeap struct {
// contains filtered or unexported fields
}
LimitSizeHeap heap with limit size
func NewLimitSizeHeap ¶ added in v1.15.0
func NewLimitSizeHeap(size int, isHighest bool) (h *LimitSizeHeap, err error)
NewLimitSizeHeap create new LimitSizeHeap
func (*LimitSizeHeap) Pop ¶ added in v1.15.0
func (h *LimitSizeHeap) Pop() HeapItemItf
Pop pop from the tail. if `isHighest=True`, pop the biggest item
func (*LimitSizeHeap) Push ¶ added in v1.15.0
func (h *LimitSizeHeap) Push(item HeapItemItf) HeapItemItf
Push push item into heap, return popped item if exceed size
type LoggerEncoding ¶ added in v1.15.0
type LoggerEncoding string
type LoggerItf ¶ added in v1.17.0
type LoggerItf interface { Level() zapcore.Level ChangeLevel(level string) (err error) DebugSample(sample int, msg string, fields ...zapcore.Field) InfoSample(sample int, msg string, fields ...zapcore.Field) WarnSample(sample int, msg string, fields ...zapcore.Field) Clone() LoggerItf Named(s string) LoggerItf With(fields ...zapcore.Field) LoggerItf WithOptions(opts ...zap.Option) LoggerItf // contains filtered or unexported methods }
var ( /*Logger logging tool. * Info(msg string, fields ...Field) * Debug(msg string, fields ...Field) * Warn(msg string, fields ...Field) * Error(msg string, fields ...Field) * Panic(msg string, fields ...Field) * DebugSample(sample int, msg string, fields ...zapcore.Field) * InfoSample(sample int, msg string, fields ...zapcore.Field) * WarnSample(sample int, msg string, fields ...zapcore.Field) */ Logger LoggerItf )
func CreateNewDefaultLogger ¶ added in v1.10.1
CreateNewDefaultLogger set default utils.Logger
func NewConsoleLoggerWithName ¶ added in v1.12.8
NewConsoleLoggerWithName create new logger with name
func NewLogger ¶ added in v1.8.0
func NewLogger(optfs ...LoggerOptFunc) (l LoggerItf, err error)
NewLogger create new logger
type LoggerOptFunc ¶ added in v1.17.0
type LoggerOptFunc func(l *loggerOption) error
func WithLoggerEncoding ¶ added in v1.15.0
func WithLoggerEncoding(format LoggerEncoding) LoggerOptFunc
WithLoggerEncoding set logger encoding formet
func WithLoggerErrorOutputPaths ¶ added in v1.15.0
func WithLoggerErrorOutputPaths(paths []string) LoggerOptFunc
WithLoggerErrorOutputPaths set error logs output path
like "stderr"
func WithLoggerLevel ¶ added in v1.15.0
func WithLoggerLevel(level string) LoggerOptFunc
WithLoggerLevel set logger level
func WithLoggerName ¶ added in v1.15.0
func WithLoggerName(name string) LoggerOptFunc
WithLoggerName set logger name
func WithLoggerOutputPaths ¶ added in v1.15.0
func WithLoggerOutputPaths(paths []string) LoggerOptFunc
WithLoggerOutputPaths set output path
like "stdout"
func WithLoggerZapOptions ¶ added in v1.15.0
func WithLoggerZapOptions(opts ...zap.Option) LoggerOptFunc
WithLoggerZapOptions set logger with zap.Option
type LoggerType ¶
LoggerType extend from zap.Logger
func (*LoggerType) ChangeLevel ¶ added in v1.8.0
func (l *LoggerType) ChangeLevel(level string) (err error)
ChangeLevel change logger level
all children logger share the same level of their parent logger, so if you change any logger's level, all its parent and children logger's level will be changed.
func (*LoggerType) Clone ¶ added in v1.10.1
func (l *LoggerType) Clone() LoggerItf
Clone clone new Logger that inherit all config
func (*LoggerType) DebugSample ¶
func (l *LoggerType) DebugSample(sample int, msg string, fields ...zapcore.Field)
DebugSample emit debug log with propability sample/SampleRateDenominator. sample could be [0, 1000], less than 0 means never, great than 1000 means certainly
func (*LoggerType) InfoSample ¶
func (l *LoggerType) InfoSample(sample int, msg string, fields ...zapcore.Field)
InfoSample emit info log with propability sample/SampleRateDenominator
func (*LoggerType) Level ¶ added in v1.13.11
func (l *LoggerType) Level() zapcore.Level
Level get current level of logger
func (*LoggerType) Named ¶ added in v1.10.1
func (l *LoggerType) Named(s string) LoggerItf
Named adds a new path segment to the logger's name. Segments are joined by periods. By default, Loggers are unnamed.
func (*LoggerType) WarnSample ¶
func (l *LoggerType) WarnSample(sample int, msg string, fields ...zapcore.Field)
WarnSample emit warn log with propability sample/SampleRateDenominator
func (*LoggerType) With ¶ added in v1.9.4
func (l *LoggerType) With(fields ...zapcore.Field) LoggerItf
With creates a child logger and adds structured context to it. Fields added to the child don't affect the parent, and vice versa.
func (*LoggerType) WithOptions ¶ added in v1.9.4
func (l *LoggerType) WithOptions(opts ...zap.Option) LoggerItf
WithOptions clones the current Logger, applies the supplied Options, and returns the resulting Logger. It's safe to use concurrently.
type Mail ¶
type Mail struct {
// contains filtered or unexported fields
}
Mail easy way to send basic email
Example ¶
sender := NewMail("smtp_host", 53) if err := sender.Send( "fromAddr", "toAddr", "frName", "toName", "Title", "Content", ); err != nil { Logger.Error("try to send email got error", zap.Error(err)) }
Output:
type MailSendOptFunc ¶ added in v1.17.0
type MailSendOptFunc func(*mailSendOpt)
MailSendOptFunc is a function to set option for Mail.Send
func WithMailSendDialer ¶ added in v1.17.0
func WithMailSendDialer(dialerFact func(host string, port int, username, passwd string) EmailDialer) MailSendOptFunc
WithMailSendDialer set gomail.Dialer
type Mutex ¶ added in v1.3.7
type Mutex struct {
// contains filtered or unexported fields
}
Mutex mutex that support unblocking lock
Example ¶
l := NewMutex() if !l.TryLock() { Logger.Info("can not acquire lock") return } defer l.ForceRelease()
Output:
func (*Mutex) ForceRelease ¶ added in v1.7.5
func (m *Mutex) ForceRelease()
ForceRelease force release lock
func (*Mutex) TryRelease ¶ added in v1.3.7
TryRelease return true if succeed release
type PGZCompressor ¶ added in v1.10.0
type PGZCompressor struct {
// contains filtered or unexported fields
}
PGZCompressor compress by gz with buf
Example ¶
originText := testCompressraw writer := &bytes.Buffer{} var err error // writer c, err := NewPGZCompressor(writer) if err != nil { Logger.Error("new compressor", zap.Error(err)) return } if _, err = c.WriteString(originText); err != nil { Logger.Error("write string to compressor", zap.Error(err)) return } if err = c.Flush(); err != nil { Logger.Error("flush compressor", zap.Error(err)) return } // reader var gz *gzip.Reader if gz, err = gzip.NewReader(writer); err != nil { Logger.Error("new compressor", zap.Error(err)) return } var bs []byte if bs, err = ioutil.ReadAll(gz); err != nil { Logger.Error("read from compressor", zap.Error(err)) return } got := string(bs) if got != originText { Logger.Error("extract compressed text invalidate", zap.String("got", got), zap.ByteString("expect", bs)) return }
Output:
func NewPGZCompressor ¶ added in v1.10.0
func NewPGZCompressor(writer io.Writer, opts ...CompressOptFunc) (c *PGZCompressor, err error)
NewPGZCompressor create new PGZCompressor
func (*PGZCompressor) Flush ¶ added in v1.10.0
func (c *PGZCompressor) Flush() (err error)
Flush flush buffer bytes into bottom writer with gz meta footer
func (*PGZCompressor) Write ¶ added in v1.10.0
func (c *PGZCompressor) Write(d []byte) (int, error)
Write write bytes via compressor
func (*PGZCompressor) WriteFooter ¶ added in v1.10.0
func (c *PGZCompressor) WriteFooter() (err error)
WriteFooter write gz footer
func (*PGZCompressor) WriteString ¶ added in v1.10.0
func (c *PGZCompressor) WriteString(d string) (int, error)
WriteString write string via compressor
type PairList ¶
type PairList []SortItemItf
PairList array of sort items
func SortBiggest ¶
SortBiggest sort from biggest to smallest
func SortSmallest ¶
SortSmallest sort from smallest to biggest
type ParallelCounter ¶ added in v1.6.3
ParallelCounter parallel count with child counter
func NewParallelCounter ¶ added in v1.6.3
func NewParallelCounter(quoteStep, rotatePoint int64) (*ParallelCounter, error)
NewParallelCounter get new parallel counter
func NewParallelCounterFromN ¶ added in v1.6.3
func NewParallelCounterFromN(n, quoteStep, rotatePoint int64) (*ParallelCounter, error)
NewParallelCounterFromN get new parallel counter
func (*ParallelCounter) GetChild ¶ added in v1.6.3
func (c *ParallelCounter) GetChild() *ChildParallelCounter
GetChild create new child
func (*ParallelCounter) GetQuote ¶ added in v1.6.3
func (c *ParallelCounter) GetQuote(step int64) (from, to int64)
GetQuote child request new quote from parent
type PriorityQ ¶ added in v1.15.0
type PriorityQ struct {
// contains filtered or unexported fields
}
PriorityQ lower structure used by heap
do not use this structure directly
func NewPriorityQ ¶ added in v1.15.0
NewPriorityQ create new PriorityQ
func (*PriorityQ) Pop ¶ added in v1.15.0
func (p *PriorityQ) Pop() (popped interface{})
Pop pop from the tail. if `isMaxTop=True`, pop the biggest item
func (*PriorityQ) Push ¶ added in v1.15.0
func (p *PriorityQ) Push(x interface{})
Push push new item into heapq
func (*PriorityQ) Remove ¶ added in v1.15.0
func (p *PriorityQ) Remove(v HeapItemItf) (ok bool)
Remove remove an specific item
type RequestData ¶
RequestData http request
type RotateCounter ¶
type RotateCounter struct { Mutex // contains filtered or unexported fields }
RotateCounter rotate counter
Example ¶
counter, err := NewRotateCounter(10) if err != nil { panic(err) } counter.Count() // 1 counter.CountN(10) // 1
Output:
func NewRotateCounter ¶
func NewRotateCounter(rotatePoint int64) (*RotateCounter, error)
NewRotateCounter create new RotateCounter with threshold from 0
func NewRotateCounterFromN ¶
func NewRotateCounterFromN(n, rotatePoint int64) (*RotateCounter, error)
NewRotateCounterFromN create new RotateCounter with threshold from N
func NewRotateCounterFromNWithCtx ¶ added in v1.7.5
func NewRotateCounterFromNWithCtx(ctx context.Context, n, rotatePoint int64) (*RotateCounter, error)
NewRotateCounterFromNWithCtx create new RotateCounter with threshold from N
func NewRotateCounterWithCtx ¶ added in v1.7.5
func NewRotateCounterWithCtx(ctx context.Context, rotatePoint int64) (*RotateCounter, error)
NewRotateCounterWithCtx create new RotateCounter with threshold from 0
func (*RotateCounter) Close ¶ added in v1.7.5
func (c *RotateCounter) Close()
Close stop rorate runner
func (*RotateCounter) Count ¶
func (c *RotateCounter) Count() int64
Count increse and return the result
func (*RotateCounter) CountN ¶
func (c *RotateCounter) CountN(n int64) (r int64)
CountN increse N and return the result
func (*RotateCounter) Get ¶ added in v1.7.8
func (c *RotateCounter) Get() int64
Get return current counter's number
type SettingsEncryptOptf ¶ added in v1.13.5
type SettingsEncryptOptf func(*settingsAESEncryptOpt) error
SettingsEncryptOptf options to encrypt files in dir
func AESEncryptFilesInDirFileAppend
deprecated
added in
v1.13.5
func AESEncryptFilesInDirFileAppend(append string) SettingsEncryptOptf
AESEncryptFilesInDirFileAppend will append in encrypted file'name before ext
xxx.toml -> xxx.enc.toml
Deprecated: use AESEncryptFilesInDirFileSuffix instead
func AESEncryptFilesInDirFileExt ¶ added in v1.13.5
func AESEncryptFilesInDirFileExt(ext string) SettingsEncryptOptf
AESEncryptFilesInDirFileExt only encrypt files with specific ext
func AESEncryptFilesInDirFileSuffix ¶ added in v1.16.0
func AESEncryptFilesInDirFileSuffix(suffix string) SettingsEncryptOptf
AESEncryptFilesInDirFileSuffix will append to encrypted's filename as suffix
xxx.toml -> xxx.toml.enc
type SettingsOptFunc ¶ added in v1.13.2
type SettingsOptFunc func(*settingsOpt) error
SettingsOptFunc opt for settings
func WithSettingsAesEncrypt ¶ added in v1.13.4
func WithSettingsAesEncrypt(key []byte) SettingsOptFunc
WithSettingsAesEncrypt decrypt config file by aes
func WithSettingsEnableInclude ¶ added in v1.16.0
func WithSettingsEnableInclude() SettingsOptFunc
WithSettingsEnableInclude enable `include` in config file
func WithSettingsEncryptedFileContain
deprecated
added in
v1.13.5
func WithSettingsEncryptedFileContain(filenameMark string) SettingsOptFunc
WithSettingsEncryptedFileContain only decrypt files which name contains `filenameMark`
Deprecated: use WithSettingsEncryptedFileSuffix instead
func WithSettingsEncryptedFileSuffix ¶ added in v1.16.0
func WithSettingsEncryptedFileSuffix(suffix string) SettingsOptFunc
WithSettingsEncryptedFileSuffix only decrypt files which name ends with `encryptedSuffix`
func WithSettingsInclude
deprecated
added in
v1.13.2
func WithSettingsInclude(enableInclude bool) SettingsOptFunc
WithSettingsInclude enable `include` in config file
Deprecated: use WithSettingsEnableInclude instead
type SettingsType ¶
SettingsType type of project settings
func (*SettingsType) BindPFlags ¶
func (s *SettingsType) BindPFlags(p *pflag.FlagSet) error
BindPFlags bind pflags to settings
func (*SettingsType) Get ¶
func (s *SettingsType) Get(key string) interface{}
Get get setting by key
func (*SettingsType) GetBool ¶
func (s *SettingsType) GetBool(key string) bool
GetBool get setting by key
func (*SettingsType) GetDuration ¶
func (s *SettingsType) GetDuration(key string) time.Duration
GetDuration get setting by key
func (*SettingsType) GetInt ¶
func (s *SettingsType) GetInt(key string) int
GetInt get setting by key
func (*SettingsType) GetInt64 ¶
func (s *SettingsType) GetInt64(key string) int64
GetInt64 get setting by key
func (*SettingsType) GetString ¶
func (s *SettingsType) GetString(key string) string
GetString get setting by key
func (*SettingsType) GetStringMap ¶ added in v1.5.4
func (s *SettingsType) GetStringMap(key string) map[string]interface{}
GetStringMap return map contains interface
func (*SettingsType) GetStringMapString ¶ added in v1.5.4
func (s *SettingsType) GetStringMapString(key string) map[string]string
GetStringMapString return map contains strings
func (*SettingsType) GetStringSlice ¶
func (s *SettingsType) GetStringSlice(key string) []string
GetStringSlice get setting by key
func (*SettingsType) IsSet ¶ added in v1.5.4
func (s *SettingsType) IsSet(key string) bool
IsSet check whether exists
func (*SettingsType) LoadFromConfigServer ¶ added in v1.13.2
func (s *SettingsType) LoadFromConfigServer(url, app, profile, label string) (err error)
LoadFromConfigServer load configs from config-server,
endpoint `{url}/{app}/{profile}/{label}`
func (*SettingsType) LoadFromConfigServerWithRawYaml ¶ added in v1.13.2
func (s *SettingsType) LoadFromConfigServerWithRawYaml(url, app, profile, label, key string) (err error)
LoadFromConfigServerWithRawYaml load configs from config-server
endpoint `{url}/{app}/{profile}/{label}`
load raw yaml content and parse.
func (*SettingsType) LoadFromDir ¶ added in v1.13.2
func (s *SettingsType) LoadFromDir(dirPath string) error
LoadFromDir load settings from dir, default fname is `settings.yml`
func (*SettingsType) LoadFromFile ¶ added in v1.13.2
func (s *SettingsType) LoadFromFile(filePath string, opts ...SettingsOptFunc) (err error)
LoadFromFile load settings from file
func (*SettingsType) LoadSettings ¶
func (s *SettingsType) LoadSettings()
LoadSettings load settings file
func (*SettingsType) Set ¶
func (s *SettingsType) Set(key string, val interface{})
Set set setting by key
func (*SettingsType) Unmarshal ¶ added in v1.14.6
func (s *SettingsType) Unmarshal(obj interface{}) error
Unmarshal unmarshals the config into a Struct. Make sure that the tags on the fields of the structure are properly set.
func (*SettingsType) UnmarshalKey ¶ added in v1.14.6
func (s *SettingsType) UnmarshalKey(key string, obj interface{}) error
UnmarshalKey takes a single key and unmarshals it into a Struct.
type SingleItemExpCache ¶ added in v1.15.0
type SingleItemExpCache struct {
// contains filtered or unexported fields
}
SingleItemExpCache single item with expires
func NewSingleItemExpCache ¶ added in v1.15.0
func NewSingleItemExpCache(ttl time.Duration) *SingleItemExpCache
NewSingleItemExpCache new expcache contains single data
func (*SingleItemExpCache) Get ¶ added in v1.15.0
func (c *SingleItemExpCache) Get() (data interface{}, ok bool)
Get get data
if data is expired, ok=false
func (*SingleItemExpCache) GetString ¶ added in v1.15.0
func (c *SingleItemExpCache) GetString() (data string, ok bool)
GetString same as Get, but return string
func (*SingleItemExpCache) GetUintSlice ¶ added in v1.15.0
func (c *SingleItemExpCache) GetUintSlice() (data []uint, ok bool)
GetUintSlice same as Get, but return []uint
func (*SingleItemExpCache) Set ¶ added in v1.15.0
func (c *SingleItemExpCache) Set(data interface{})
Set set data and refresh expires
type SortItemItf ¶
type SortItemItf interface { GetValue() int GetData() interface{} }
SortItemItf interface of sort item
type StopSignalOptFunc ¶ added in v1.14.8
type StopSignalOptFunc func(*stopSignalOpt)
func WithStopSignalCloseSignals ¶ added in v1.14.8
func WithStopSignalCloseSignals(signals ...os.Signal) StopSignalOptFunc
WithStopSignalCloseSignals set signals that will trigger close
type Throttle ¶
type Throttle struct { *ThrottleCfg // contains filtered or unexported fields }
Throttle current limitor
Example ¶
ctx := context.Background() throttle, err := NewThrottleWithCtx(ctx, &ThrottleCfg{ NPerSec: 10, Max: 100, }) if err != nil { Logger.Panic("new throttle") } defer throttle.Close() inChan := make(chan int) for msg := range inChan { if !throttle.Allow() { continue } // do something with msg fmt.Println(msg) }
Output:
func NewThrottleWithCtx ¶ added in v1.9.0
func NewThrottleWithCtx(ctx context.Context, cfg *ThrottleCfg) (t *Throttle, err error)
NewThrottleWithCtx create new Throttle
90x faster than `rate.NewLimiter`
type ThrottleCfg ¶
type ThrottleCfg struct {
Max, NPerSec int
}
ThrottleCfg Throttle's configuration
type Uint32Counter ¶
type Uint32Counter struct {
// contains filtered or unexported fields
}
Uint32Counter uint32 counter
func NewUint32Counter ¶
func NewUint32Counter() *Uint32Counter
NewUint32Counter return new Uint32Counter from 0
func NewUint32CounterFromN ¶
func NewUint32CounterFromN(n uint32) *Uint32Counter
NewUint32CounterFromN return new Uint32Counter from n
func (*Uint32Counter) Count ¶
func (c *Uint32Counter) Count() uint32
Count increse and return the result
func (*Uint32Counter) CountN ¶
func (c *Uint32Counter) CountN(n uint32) uint32
CountN increse N and return the result
func (*Uint32Counter) Get ¶
func (c *Uint32Counter) Get() uint32
Get return current counter's number
func (*Uint32Counter) Set ¶
func (c *Uint32Counter) Set(n uint32)
Set overwrite the counter's number