utils

package module
v1.12.10 Latest Latest
Warning

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

Go to latest
Published: May 23, 2020 License: MIT Imports: 51 Imported by: 22

README

Go-Utils

Many useful golang tools, support >= v1.12.

Commitizen friendly Go Report Card GoDoc Build Status codecov

Install:

go get github.com/Laisky/go-utils

Usage

import (
    utils "github.com/Laisky/go-utils"
)

Read the document or test file to get more details.

Documentation

Overview

Package utils 一些常用工具

Index

Examples

Constants

View Source
const (
	ANSIColorReset int = iota
	ANSIColorBold
	ANSIColorFaint
	ANSIColorItalic
	ANSIColorUnderline
	ANSIColorBlinkSlow
	ANSIColorBlinkRapid
	ANSIColorReverseVideo
	ANSIColorConcealed
	ANSIColorCrossedOut
)

Base attributes

View Source
const (
	ANSIColorFgBlack int = iota + 30
	ANSIColorFgRed
	ANSIColorFgGreen
	ANSIColorFgYellow
	ANSIColorFgBlue
	ANSIColorFgMagenta
	ANSIColorFgCyan
	ANSIColorFgWhite
)

Foreground text colors

View Source
const (
	ANSIColorFgHiBlack int = iota + 90
	ANSIColorFgHiRed
	ANSIColorFgHiGreen
	ANSIColorFgHiYellow
	ANSIColorFgHiBlue
	ANSIColorFgHiMagenta
	ANSIColorFgHiCyan
	ANSIColorFgHiWhite
)

Foreground Hi-Intensity text colors

View Source
const (
	ANSIColorBgBlack int = iota + 40
	ANSIColorBgRed
	ANSIColorBgGreen
	ANSIColorBgYellow
	ANSIColorBgBlue
	ANSIColorBgMagenta
	ANSIColorBgCyan
	ANSIColorBgWhite
)

Background text colors

View Source
const (
	ANSIColorBgHiBlack int = iota + 100
	ANSIColorBgHiRed
	ANSIColorBgHiGreen
	ANSIColorBgHiYellow
	ANSIColorBgHiBlue
	ANSIColorBgHiMagenta
	ANSIColorBgHiCyan
	ANSIColorBgHiWhite
)

Background Hi-Intensity text colors

View Source
const (
	HTTPJSONHeader    = "Content-Type"
	HTTPJSONHeaderVal = "application/json"
)

HTTP defines

View Source
const (
	// SampleRateDenominator sample rate = sample / SampleRateDenominator
	SampleRateDenominator = 1000

	LoggerLevelInfo  = "info"
	LoggerLevelDebug = "debug"
	LoggerLevelWarn  = "warn"
	LoggerLevelError = "error"
)
View Source
const ANSIColorEscape = "\x1b"

inspired by github.com/fatih/color

Variables

View Source
var (
	// SignMethodHS256 use HS256 for jwt
	SignMethodHS256 = jwt.SigningMethodHS256
	// SignMethodES256 use ES256 for jwt
	SignMethodES256 = jwt.SigningMethodES256
)
View Source
var (
	// ParseTs2UTC can parse unix timestamp(int64) to time.Time
	ParseTs2UTC = ParseUnix2UTC
	// ParseTs2String can parse unix timestamp(int64) to string
	ParseTs2String = ParseUnix2String
)
View Source
var (
	// ParseTs2Time can parse unix timestamp(int64) to time.Time
	ParseTs2Time = ParseTs2UTC
	// UnixNano2UTC convert unixnano to UTC time
	UnixNano2UTC = ParseUnixNano2UTC
)
View Source
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
)
View Source
var (
	// ForceGC force to start gc blocking
	ForceGC = ForceGCBlocking
	// TriggerGC force to start gc unblocking
	TriggerGC = ForceGCUnBlocking
)
View Source
var FormatECDSASign = EncodeES256SignByHex

FormatECDSASign

Deprecated: use EncodeES256SignByBase6e instead

View Source
var GetHTTPClient = NewHTTPClient

GetHTTPClient new http client

Deprecated: use NewHTTPClient replaced

View Source
var (

	// JSON effective json
	JSON = json
)
View Source
var Settings = &SettingsType{}

Settings is the settings for this project

Functions

func AddFileToZip added in v1.11.5

func AddFileToZip(zipWriter *zip.Writer, filename string) (err error)

AddFileToZip add file tp zip.Writer

https://golangcode.com/create-zip-files-in-go/

func AutoGC added in v1.10.2

func AutoGC(ctx context.Context, opts ...GcOptFunc) (err error)

AutoGC auto trigger GC when memory usage exceeds the custom ration

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 Base64 added in v1.12.7

func Base64(raw []byte) string

Base64 encode bytes to string use base64

func CheckResp

func CheckResp(resp *http.Response) error

CheckResp check HTTP response's status code and return the error with body message

func Color added in v1.12.9

func Color(color int, s string) string

Color wrap with ANSI color

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

func DecodeECDSAPublicKey(pemEncodedPub []byte) (*ecdsa.PublicKey, error)

DecodeECDSAPrivateKey decode ecdsa public key from pem bytes

func DecodeES256SignByBase64 added in v1.12.3

func DecodeES256SignByBase64(sign string) (a, b *big.Int, err error)

DecodeES256SignByBase64 parse ecdsa sign string to two *big.Int

func DecodeES256SignByHex added in v1.12.3

func DecodeES256SignByHex(sign string) (a, b *big.Int, err error)

DecodeES256SignByHex parse ecdsa sign string to two *big.Int

func DecryptByAes added in v1.12.7

func DecryptByAes(secret []byte, encrypted []byte) ([]byte, error)

DecryptByAes encrypt bytes by aes with key

inspired by https://tutorialedge.net/golang/go-encrypt-decrypt-aes-tutorial/

func DirSize added in v1.10.1

func DirSize(path string) (size int64, err error)

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

func EncodeECDSAPublicKey(publicKey *ecdsa.PublicKey) ([]byte, error)

EncodeECDSAPublicKey encode ecdsa public key to pem bytes

func EncodeES256SignByBase64 added in v1.12.3

func EncodeES256SignByBase64(a, b *big.Int) string

EncodeES256SignByBase64 format ecdsa sign to stirng

func EncodeES256SignByHex added in v1.12.3

func EncodeES256SignByHex(a, b *big.Int) string

EncodeES256SignByHex format ecdsa sign to stirng

func EncryptByAES added in v1.12.7

func EncryptByAES(secret []byte, cnt []byte) ([]byte, error)

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

func FlattenMap(data map[string]interface{}, delimiter string)

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, "__") // {"a": "1", "b__c": 2, "b__d__e": 3}
Output:

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

func FormatBig2Base64(b *big.Int) string

FormatBig2Base64 format big to base64 string

func FormatBig2Hex added in v1.11.4

func FormatBig2Hex(b *big.Int) string

FormatBig2Hex format big to hex string

func GeneratePasswordHash added in v1.2.0

func GeneratePasswordHash(password []byte) ([]byte, error)

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 HTTPInvalidStatusError

func HTTPInvalidStatusError(statusCode int) error

HTTPInvalidStatusError return error about status code

func HashSHA128String added in v1.10.2

func HashSHA128String(val string) string

HashSHA128String calculate string's hash by sha256

Example
val := "dfij3ifj2jjl2jelkjdkwef"
got := HashSHA128String(val)
Logger.Info("hash", zap.String("got", got))
Output:

func HashSHA256String added in v1.10.1

func HashSHA256String(val string) string

HashSHA256String calculate string's hash by sha256

Example
val := "dfij3ifj2jjl2jelkjdkwef"
got := HashSHA256String(val)
Logger.Info("hash", zap.String("got", got))
Output:

func HashXxhashString added in v1.10.1

func HashXxhashString(val string) string

HashXxhashString calculate string's hash by sha256

Example
val := "dfij3ifj2jjl2jelkjdkwef"
got := HashXxhashString(val)
Logger.Info("hash", zap.String("got", got))
Output:

func IsHasField added in v1.12.2

func IsHasField(st interface{}, fieldName string) bool

IsHasField check is struct has field

inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/

func IsHasMethod added in v1.12.2

func IsHasMethod(st interface{}, methodName string) bool

IsHasMethod check is struct has method

inspired by https://mrwaggel.be/post/golang-reflect-if-initialized-struct-has-member-method-or-fields/

func IsPtr added in v1.12.0

func IsPtr(t interface{}) bool

IsPtr check if t is pointer

func MaxInt added in v1.11.1

func MaxInt(a, b int) int

MaxInt get the max int of two

func MinInt added in v1.11.1

func MinInt(a, b int) int

MinInt get the min int of two

func NewHTTPClient added in v1.12.8

func NewHTTPClient(opts ...HttpClientOptFunc) (c *http.Client, err error)

NewHTTPClient create http client

func ParseBase642Big added in v1.12.6

func ParseBase642Big(raw string) (*big.Int, error)

ParseBase642Big parse base64 string to big

func ParseECDSASign added in v1.11.4

func ParseECDSASign(sign string) (a, b *big.Int, ok bool)

ParseECDSASign(Deprecated)

func ParseHex2Big added in v1.11.4

func ParseHex2Big(hex string) (b *big.Int, ok bool)

ParseHex2Big parse hex string to big

func ParseHex2UTC added in v1.8.0

func ParseHex2UTC(ts string) (t time.Time, err error)

ParseHex2UTC parse hex to UTC time

func ParseHexNano2UTC added in v1.8.0

func ParseHexNano2UTC(ts string) (t time.Time, err error)

ParseHexNano2UTC parse hex contains nano to UTC time

func ParseJWTTokenWithoutValidate added in v1.10.0

func ParseJWTTokenWithoutValidate(token string) (payload jwt.MapClaims, err error)

ParseJWTTokenWithoutValidate parse and get payload without validate jwt token

func ParseUnix2String added in v1.8.0

func ParseUnix2String(ts int64, layout string) string

ParseUnix2String can parse unix timestamp(int64) to string

func ParseUnix2UTC added in v1.8.0

func ParseUnix2UTC(ts int64) time.Time

ParseUnix2UTC convert unix to UTC time

func ParseUnixNano2UTC added in v1.8.0

func ParseUnixNano2UTC(ts int64) time.Time

ParseUnixNano2UTC convert unixnano to UTC time

func RandomStringWithLength

func RandomStringWithLength(n int) string

RandomStringWithLength generate random string with specific length

func RegexNamedSubMatch

func RegexNamedSubMatch(r *regexp.Regexp, str string, subMatchMap map[string]string) error

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.Printf("got: %+v", groups) // map[string]string{"key": 12345}
Output:

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 Round

func Round(val float64, roundOn float64, places int) (newVal float64)

Round Golang does not include a round function in the standard math package Round(123.555555, .5, 3) -> 123.556

Example
Round(123.555555, .5, 3) // got 123.556
Output:

func RunCMD added in v1.12.5

func RunCMD(ctx context.Context, app string, args ...string) (stdout []byte, err error)

RunCMD run command script

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 SetupClock

func SetupClock(refreshInterval time.Duration)

SetupClock setup internal Clock with step

func SignByECDSAWithSHA256 added in v1.11.3

func SignByECDSAWithSHA256(priKey *ecdsa.PrivateKey, content []byte) (r, s *big.Int, err error)

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 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 TemplateWithMap added in v1.5.4

func TemplateWithMap(tpl string, data map[string]interface{}) string

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 URLMasking added in v1.9.3

func URLMasking(url, mask string) string

URLMasking masking password in url

Example
originURL := "http://12ijij:3j23irj@jfjlwef.ffe.com"
newURL := URLMasking(originURL, "*****")
fmt.Println(newURL) // http://12ijij:*****@jfjlwef.ffe.com
Output:

func UTCNow

func UTCNow() time.Time

UTCNow 获取当前 UTC 时间

func UniqueStrings added in v1.11.2

func UniqueStrings(vs []string) (r []string)

UniqueStrings remove duplicate string in slice

func Unzip added in v1.11.5

func Unzip(src string, dest string) (filenames []string, err error)

Unzip will decompress a zip archive, moving all files and folders within the zip file (parameter 1) to an output directory (parameter 2).

https://golangcode.com/unzip-files-in-go/

func ValidateFileHash added in v1.12.1

func ValidateFileHash(filepath string, hashed string) error

ValidateFileHash validate file content with hashed string

func ValidatePasswordHash added in v1.2.0

func ValidatePasswordHash(hashedPassword, password []byte) bool

ValidatePasswordHash validate password is match with hashedPassword

func VerifyByECDSAWithSHA256 added in v1.11.3

func VerifyByECDSAWithSHA256(pubKey *ecdsa.PublicKey, content []byte, r, s *big.Int) bool

VerifyByECDSAWithSHA256 verify signature by ecdsa 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 ZipFiles added in v1.11.5

func ZipFiles(filename string, files []string) (err error)

ZipFiles compresses one or many files into a single zip archive file. Param 1: filename is the output zip file's name. Param 2: files is a list of files to add to the zip.

https://golangcode.com/create-zip-files-in-go/

Types

type AcquireLockOptFunc added in v1.10.0

type AcquireLockOptFunc func(*acquireLockOption) error

AcquireLockOptFunc options for acquire lock

func WithAcquireLockDuration added in v1.10.0

func WithAcquireLockDuration(duration time.Duration) AcquireLockOptFunc

WithAcquireLockDuration set how long to extend lock

func WithAcquireLockIsRenewal added in v1.10.0

func WithAcquireLockIsRenewal(isRenewal bool) AcquireLockOptFunc

WithAcquireLockIsRenewal set whether to auto renewal lock

func WithAcquireLockMaxRetry added in v1.10.0

func WithAcquireLockMaxRetry(maxRetry int) AcquireLockOptFunc

WithAcquireLockMaxRetry set max retry to acquire lock

func WithAcquireLockRenewalInterval added in v1.10.0

func WithAcquireLockRenewalInterval(renewalInterval time.Duration) AcquireLockOptFunc

WithAcquireLockRenewalInterval set how ofter to renewal lock

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) Close added in v1.9.0

func (a *AlertPusher) Close()

Close close AlertPusher

func (*AlertPusher) GetZapHook added in v1.10.1

func (a *AlertPusher) GetZapHook() func(zapcore.Entry, []zapcore.Field) (err error)

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 ChildParallelCounter added in v1.6.3

type ChildParallelCounter struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

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)
	Close()
}

ClockItf high performance lazy clock

type ClockType

type ClockType struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

ClockType high performance clock with lazy refreshing

func NewClock

func NewClock(ctx context.Context, refreshInterval time.Duration) *ClockType

NewClock create new Clock

func (*ClockType) Close added in v1.7.3

func (c *ClockType) Close()

Close stop Clock update

func (*ClockType) GetNanoTimeInHex added in v1.8.0

func (c *ClockType) GetNanoTimeInHex() string

GetNanoTimeInHex return current time with nano in hex

func (*ClockType) GetTimeInHex added in v1.8.0

func (c *ClockType) GetTimeInHex() string

GetTimeInHex return current time in hex

func (*ClockType) GetTimeInRFC3339Nano

func (c *ClockType) GetTimeInRFC3339Nano() string

GetTimeInRFC3339Nano return Clock current time in string

func (*ClockType) GetUTCNow

func (c *ClockType) GetUTCNow() (t time.Time)

GetUTCNow return Clock current time.Time

func (*ClockType) SetupInterval

func (c *ClockType) SetupInterval(interval time.Duration)

SetupInterval 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
	// write footer without flush
	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

func NewConfigSrv(url, app, profile, label string) *ConfigSrv

NewConfigSrv create ConfigSrv

func (*ConfigSrv) Fetch

func (c *ConfigSrv) Fetch() error

Fetch load data from config-server

func (*ConfigSrv) Get

func (c *ConfigSrv) Get(name string) (interface{}, bool)

Get get `interface{}` from the localcache of config-server

func (*ConfigSrv) GetBool

func (c *ConfigSrv) GetBool(name string) (val bool, ok bool)

GetBool get `bool` from the localcache of config-server

func (*ConfigSrv) GetInt

func (c *ConfigSrv) GetInt(name string) (val int, ok bool)

GetInt get `int` from the localcache of config-server

func (*ConfigSrv) GetString

func (c *ConfigSrv) GetString(name string) (string, bool)

GetString get `string` from the localcache of config-server

func (*ConfigSrv) Map

func (c *ConfigSrv) Map(set func(string, interface{}))

Map interate `set(k, v)`

type Counter

type Counter struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Counter int64 counter

Example
counter := NewCounter()
counter.Count()
counter.CountN(10)
counter.Get() // get current count
Output:

func NewCounter

func NewCounter() *Counter

NewCounter create Counter from 0

func NewCounterFromN

func NewCounterFromN(n int64) *Counter

NewCounterFromN create Counter from custom number

func (*Counter) Count

func (c *Counter) Count() int64

Count increse and return the result

func (*Counter) CountN

func (c *Counter) CountN(n int64) int64

CountN increse N and return the result

func (*Counter) Get

func (c *Counter) Get() int64

Get return current counter's number

func (*Counter) GetSpeed

func (c *Counter) GetSpeed() (r float64)

GetSpeed return increasing speed from lastest invoke `GetSpeed`

func (*Counter) Set

func (c *Counter) Set(n int64)

Set overwrite the counter's number

type CtxKeyT added in v1.7.0

type CtxKeyT struct{}

CtxKeyT type of context key

type GZCompressor added in v1.6.0

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

GZCompressor compress by gz with buf

Example
originText := "fj2f32f9jp9wsif0weif20if320fi23if"
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

func WithGCMemLimitFilePath(path string) GcOptFunc

WithGCMemLimitFilePath set memory limit file

func WithGCMemRatio added in v1.10.2

func WithGCMemRatio(ratio int) GcOptFunc

WithGCMemRatio set mem ratio trigger for GC

type HttpClientOptFunc added in v1.12.3

type HttpClientOptFunc func(*httpClientOption) error

HttpClientOptFunc http client options

func WithHTTPClientInsecure added in v1.12.3

func WithHTTPClientInsecure(insecure bool) HttpClientOptFunc

WithHTTPClientInsecure set http client igonre ssl issue

func WithHTTPClientMaxConn added in v1.12.3

func WithHTTPClientMaxConn(maxConn int) HttpClientOptFunc

WithHTTPClientMaxConn set http client max connection

func WithHTTPClientTimeout added in v1.12.3

func WithHTTPClientTimeout(timeout time.Duration) HttpClientOptFunc

WithHTTPClientTimeout set http client timeout

type Int64CounterItf added in v1.7.8

type Int64CounterItf interface {
	Count() int64
	CountN(n int64) int64
}

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.StandardClaims
}

claims := &jwtClaims{
	jwt.StandardClaims{
		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) 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 seperate 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

type JWTOptFunc func(*JWT) error

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 LaiskyRemoteLock added in v1.10.0

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

LaiskyRemoteLock acquire lock from Laisky's GraphQL API

func NewLaiskyRemoteLock added in v1.10.0

func NewLaiskyRemoteLock(api, token string, opts ...LaiskyRemoteLockOptFunc) (l *LaiskyRemoteLock, err error)

NewLaiskyRemoteLock create remote lock

func (*LaiskyRemoteLock) AcquireLock added in v1.10.0

func (l *LaiskyRemoteLock) AcquireLock(ctx context.Context, lockName string, opts ...AcquireLockOptFunc) (ok bool, err error)

AcquireLock acquire lock with lockname, if `isRenewal=true`, will automate refresh lock's lease until ctx done. duration to specify how much time each renewal will extend.

type LaiskyRemoteLockOptFunc added in v1.10.0

type LaiskyRemoteLockOptFunc func(*LaiskyRemoteLock) error

LaiskyRemoteLockOptFunc laisky's lock option

func WithLaiskyRemoteLockTimeout added in v1.10.0

func WithLaiskyRemoteLockTimeout(timeout time.Duration) LaiskyRemoteLockOptFunc

WithLaiskyRemoteLockTimeout set http client timeout

type LoggerType

type LoggerType struct {
	*zap.Logger
	// contains filtered or unexported fields
}

LoggerType extend from zap.Logger

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 *LoggerType
)

func CreateNewDefaultLogger added in v1.10.1

func CreateNewDefaultLogger(name, level string, opts ...zap.Option) (l *LoggerType, err error)

CreateNewDefaultLogger set default utils.Logger

func NewConsoleLoggerWithName added in v1.12.8

func NewConsoleLoggerWithName(name, level string, opts ...zap.Option) (l *LoggerType, err error)

NewConsoleLoggerWithName create new logger with name

func NewLogger added in v1.8.0

func NewLogger(level string, opts ...zap.Option) (l *LoggerType, err error)

NewLogger create new logger

func NewLoggerWithName added in v1.9.0

func NewLoggerWithName(name, level string, opts ...zap.Option) (l *LoggerType, err error)

NewLoggerWithName create new logger with name

func NewLoggerWithNameAndFormat added in v1.12.8

func NewLoggerWithNameAndFormat(name, format, level string, opts ...zap.Option) (l *LoggerType, err error)

NewLoggerWithNameAndFormat create new logger

func (*LoggerType) ChangeLevel added in v1.8.0

func (l *LoggerType) ChangeLevel(level string) (err error)

ChangeLevel change logger level

func (*LoggerType) Clone added in v1.10.1

func (l *LoggerType) Clone() *LoggerType

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) Named added in v1.10.1

func (l *LoggerType) Named(s string) *LoggerType

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) *LoggerType

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) *LoggerType

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:

func NewMail

func NewMail(host string, port int) *Mail

NewMail create Mail with SMTP host and port

func (*Mail) BuildMessage

func (m *Mail) BuildMessage(msg string) string

BuildMessage implement

func (*Mail) Login

func (m *Mail) Login(username, password string)

Login login to SMTP server

func (*Mail) Send

func (m *Mail) Send(frAddr, toAddr, frName, toName, subject, content string) (err error)

Send send email

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 NewMutex added in v1.3.7

func NewMutex() *Mutex

NewMutex create new mutex

func (*Mutex) ForceRelease added in v1.7.5

func (m *Mutex) ForceRelease()

ForceRelease force release lock

func (*Mutex) IsLocked added in v1.3.7

func (m *Mutex) IsLocked() bool

IsLocked return true if is locked

func (*Mutex) SpinLock added in v1.3.7

func (m *Mutex) SpinLock(step, timeout time.Duration)

SpinLock block until succee acquired lock

func (*Mutex) TryLock added in v1.3.7

func (m *Mutex) TryLock() bool

TryLock return true if succeed locked

func (*Mutex) TryRelease added in v1.3.7

func (m *Mutex) TryRelease() bool

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 := "fj2f32f9jp9wsif0weif20if320fi23if"
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

func SortBiggest(items PairList) PairList

SortBiggest sort from biggest to smallest

func SortSmallest

func SortSmallest(items PairList) PairList

SortSmallest sort from smallest to biggest

func (PairList) Len

func (p PairList) Len() int

Len return length of sort items

func (PairList) Less

func (p PairList) Less(i, j int) bool

Less compare two items

func (PairList) Swap

func (p PairList) Swap(i, j int)

Swap change two items

type ParallelCounter added in v1.6.3

type ParallelCounter struct {
	sync.Mutex
	// contains filtered or unexported fields
}

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 PateoAlertPusher added in v1.10.1

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

PateoAlertPusher alert pusher for pateo wechat service

func NewPateoAlertPusher added in v1.10.1

func NewPateoAlertPusher(ctx context.Context, api, token string, opts ...AlertHookOptFunc) (p *PateoAlertPusher, err error)

NewPateoAlertPusher create new PateoAlertPusher

func (*PateoAlertPusher) GetZapHook added in v1.10.1

func (p *PateoAlertPusher) GetZapHook() func(zapcore.Entry, []zapcore.Field) (err error)

GetZapHook get hook for zap logger

func (*PateoAlertPusher) Send added in v1.10.1

func (p *PateoAlertPusher) Send(title, content string, ts time.Time) (err error)

Send send alert msg

type RequestData

type RequestData struct {
	Headers map[string]string
	Data    interface{}
}

RequestData 发起请求的结构体

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 SettingsType

type SettingsType struct {
	sync.RWMutex
}

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) 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) Setup

func (s *SettingsType) Setup(configPath string) error

Setup load config file settings.yml

func (*SettingsType) SetupFromConfigServer

func (s *SettingsType) SetupFromConfigServer(url, app, profile, label string) (err error)

SetupFromConfigServer load configs from config-server, endpoint `{url}/{app}/{profile}/{label}`

func (*SettingsType) SetupFromConfigServerWithRawYaml

func (s *SettingsType) SetupFromConfigServerWithRawYaml(url, app, profile, label, key string) (err error)

SetupFromConfigServerWithRawYaml load configs from config-server

endpoint `{url}/{app}/{profile}/{label}`

load raw yaml content and parse.

func (*SettingsType) SetupFromDir

func (s *SettingsType) SetupFromDir(dirPath string) error

SetupFromDir load settings from dir, default fname is `settings.yml`

func (*SettingsType) SetupFromFile

func (s *SettingsType) SetupFromFile(filePath string) error

SetupFromFile load settings from file

type SortItemItf

type SortItemItf interface {
	GetValue() int
	GetKey() interface{}
}

SortItemItf interface of sort item

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

func (*Throttle) Allow

func (t *Throttle) Allow() bool

Allow check whether is allowed

func (*Throttle) Close added in v1.9.0

func (t *Throttle) Close()

Close stop throttle

func (*Throttle) Stop

func (t *Throttle) Stop()

Stop stop throttle

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

Directories

Path Synopsis
Package consistenthash contains some implementation of consistent hashing.
Package consistenthash contains some implementation of consistent hashing.

Jump to

Keyboard shortcuts

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