Documentation
¶
Index ¶
- Constants
- Variables
- func AddETimeParseFormat(fmt ...string)
- func AppendableFile(name string) (*os.File, error)
- func CallerRunTaskWhenPoolFull() asyncPoolOption
- func CamelCase(s string) string
- func CliRun(rail interface{ ... }, executable string, args []string, ...) (out []byte, err error)
- func CollectFields(ptr any) []reflect.StructField
- func CollectTypeFields(eleType reflect.Type) []reflect.StructField
- func ContainsAnyStr(s string, substrings ...string) bool
- func CopyFilter[T any](l []T, f func(T) bool) []T
- func CpuProfileFunc(file string, fu func()) error
- func CsvReadAll(reader io.Reader) ([][]string, error)
- func CsvReadAllIgnoreEmpty(reader io.Reader) ([][]string, error)
- func CsvReader(reader io.Reader) *csv.Reader
- func CutPrefixIgnoreCase(s string, prefix string) (string, bool)
- func CutPrefixIgnoreCaseAny(s string, prefix ...string) (string, bool)
- func CutSuffixIgnoreCase(s string, suffix string) (string, bool)
- func CutSuffixIgnoreCaseAny(s string, suffix ...string) (string, bool)
- func DebugNamedPrintlnf(debug bool, pat string, p map[string]any)
- func DebugPrintlnf(debug bool, pat string, args ...any)
- func Distinct(l []string) []string
- func DropTaskWhenPoolFull() asyncPoolOption
- func ERand(len int) string
- func EqualAnyStr(s string, canditates ...string) bool
- func EscapeString(s string) string
- func ExecCmd(executable string, args []string, opts ...func(*exec.Cmd)) (out []byte, err error)
- func FastDistinct(l []string) []string
- func FileAddSuffix(name string, ext string) string
- func FileChangeSuffix(name string, newSuffix string) (s string)
- func FileCutDotSuffix(name string) (s string, suffix string, ok bool)
- func FileCutSuffix(name string, ext string) (string, bool)
- func FileExists(path string) (bool, error)
- func FileHasAnySuffix(name string, ext ...string) bool
- func FileHasSuffix(name string, ext string) bool
- func Filter[T any](l []T, f func(T) bool) []T
- func FindEmbedStruct[T any](v any) (T, bool)
- func FindTestdata(t *testing.T, relativePath string) string
- func FixedPoolFilterFunc[T any](filterFunc func(t T) (dropped bool)) func(*FixedPool[T])
- func FmtFloat(f float64, width int, precision int) string
- func FuncName(f any) string
- func FuzzParseTime(formats []string, value string) (time.Time, error)
- func FuzzParseTimeLoc(formats []string, value string, loc *time.Location) (time.Time, error)
- func GenId() (id string)deprecated
- func GenIdP(prefix string) (id string)deprecated
- func GenNo(prefix string) string
- func GenNoL(prefix string, len int) string
- func GetLocalIPV4() string
- func HasAnyPrefix(s string, suf ...string) bool
- func HasAnySuffix(s string, suf ...string) bool
- func HasPrefixIgnoreCase(s string, prefix string) bool
- func HasSuffixIgnoreCase(s string, suffix string) bool
- func IsAnyNil(v any) bool
- func IsBasicKind(k reflect.Kind) bool
- func IsBlankStr(s string) bool
- func IsBool(boolStr string) bool
- func IsFieldExposed(fieldName string) bool
- func IsLocalAddress(address string) bool
- func IsTrue(boolStr string) bool
- func IsVoid(t reflect.Type) bool
- func LastNStr(s string, n int) string
- func MapCopy[T comparable, V any](v map[T]V) map[T]V
- func MapFirst[K comparable, V any](m map[K]V) V
- func MapKeys[T comparable, V any](m map[T]V) []T
- func MapTo[T any, V any](ts []T, mapFunc func(t T) V) []V
- func MapValues[K comparable, V any](m map[K]V) []V
- func MatchPath(pattern, s string) bool
- func MatchPathAny(pattern []string, s string) bool
- func MaxInt(a int, b int) int
- func MaxLenStr(s string, max int) string
- func MemoryProfileFunc(file string, fu func()) error
- func MergeSlice[K comparable, V any](vs []V, keyFunc func(v V) K) map[K][]V
- func MergeSliceMap[K comparable, V any](vs []V, keyFunc func(v V) K) map[K]V
- func MergeSliceMapAs[T any, K comparable, V any](ts []T, keyFunc func(t T) K, valueFunc func(t T) V) map[K]V
- func MergeStrPairs(p ...StrPair) map[string][]any
- func MinInt(a int, b int) int
- func MkdirAll(path string) error
- func MkdirParentAll(path string) error
- func Must(err error)
- func MustGet[V any](v V, err error) V
- func NamedPrintlnf(pat string, p map[string]any)
- func NamedSprintf(pat string, p map[string]any) string
- func NamedSprintfv(pat string, v any) string
- func NewSubmitAsyncFunc[T any](pool AsyncPoolItf) func(task func() (T, error)) Future[T]
- func NewSyncSlice[T any](cap int) *syncSlice[T]
- func NewVar[T any]() T
- func OpenFile(name string, flag int) (*os.File, error)
- func OpenRFile(name string) (*os.File, error)
- func OpenRWFile(name string, createIfAbsent bool) (*os.File, error)
- func PadNum(n int, digit int) string
- func PadSpace(n int, s string) string
- func PadToken(n int, s string, tok string) string
- func PanicSafeFunc(op func()) func()
- func PanicSafeRun(op func())
- func ParseClassicDateTime(val string, loc *time.Location) (time.Time, error)
- func Pick(set []rune) rune
- func Printlnf(pat string, args ...any)
- func QuoteStr(s string) string
- func QuoteStrSlice(sl []string) []string
- func RandAlpha(n int) string
- func RandLowerAlpha(n int) string
- func RandLowerAlphaNumeric(n int) string
- func RandLowerAlphaNumeric16() string
- func RandNum(n int) string
- func RandOp(ops ...func())
- func RandPick[T any](s []T) T
- func RandRune(n int, set []rune) string
- func RandStr(n int) string
- func RandUpperAlpha(n int) string
- func RandUpperAlphaNumeric(n int) string
- func ReadFileAll(path string) ([]byte, error)
- func ReadWriteFile(name string) (*os.File, error)
- func ReflectBasicValue(rv reflect.Value) (any, bool)
- func ReflectFuncName(fun any) string
- func ReflectGenMap(t any) map[string]any
- func RunPyScript(pyExec string, pyContent string, args []string, opts ...func(*exec.Cmd)) (out []byte, err error)
- func RuneWidth(r rune) int
- func SAddLineIndent(s string, indentChar string) string
- func SaveTmpFile(tmpDir string, reader io.Reader) (string, error)
- func SetETimeMarshalFormat(fmt string)
- func SetMachineCode(code int) error
- func SetToSlice[T comparable](s Set[T]) []T
- func ShuffleRunes(letters []rune, times int) []rune
- func ShuffleStr(letters string, times int) string
- func SliceCopy[T any](v []T) []T
- func SliceFilterFirst[T any](items []T, f func(T) bool) (T, bool)
- func SliceFirst[T any](v []T) (t T, ok bool)
- func SliceGetOne[T any](items []*T) *T
- func SliceRemove[T any](v []T, idx ...int) []T
- func SnowflakeId() (id string)
- func Spaces(count int) string
- func SplitKV(s string, token string) (string, string, bool)
- func SplitStr(s, sep string) []string
- func SplitSubSlices[T any](sl []T, limit int, f func(sub []T) error) error
- func StrByteLen(s string) int
- func StrMap[T any, V any](l []T, keyMapper func(T) string, valueMapper func(T) V) map[string]V
- func StrSliceMap[T any, V any](l []T, keyMapper func(T) string, valueMapper func(T) V) map[string][]V
- func StrWidth(s string) int
- func TPrintlnf(pat string, args ...any)
- func Tabs(count int) string
- func TempFile() (*os.File, error)
- func TempFilePath() (string, error)
- func TempFilePathSuffix(suffix string) (string, error)
- func TempFileSuffix(suffix string) (*os.File, error)
- func TermOpenUrl(url string) error
- func ToStr(v any) string
- func TrimStrSlice(s []string)
- func TryFileExists(path string) bool
- func TypeName(t reflect.Type) string
- func UnquoteStr(s string) string
- func UnsafeByt2Str(b []byte) string
- func UnsafeStr2Byt(s string) (b []byte)
- func UpdateSliceValue[T any](s []T, upd func(t T) T)
- func WalkTagShallow(ptr any, callbacks ...WalkTagCallback) error
- func WeightedRandPick[T interface{ ... }](s []T) T
- type AntsAsyncPool
- type AsyncPool
- type AsyncPoolItf
- type AwaitFutures
- type BasicValue
- type BatchTask
- type BatchTaskResult
- type ByteBufPool
- type Complex
- type Consumer
- type Converter
- type ETime
- func (t ETime) Add(d time.Duration) ETime
- func (t ETime) AddDate(years int, months int, days int) ETime
- func (t ETime) After(u ETime) bool
- func (t ETime) Before(u ETime) bool
- func (t ETime) EndOfDay() ETime
- func (t ETime) FormatClassic() string
- func (t ETime) FormatClassicLocale() string
- func (t ETime) FormatDate() string
- func (t ETime) FormatStd() string
- func (t ETime) FormatStdLocale() string
- func (t ETime) FormatStdMilli() string
- func (t ETime) GoString() string
- func (t ETime) In(z *time.Location) ETime
- func (t ETime) InZone(diffInHours int) ETime
- func (t ETime) LastWeekday(w time.Weekday) ETime
- func (t ETime) MarshalJSON() ([]byte, error)
- func (t ETime) NextWeekday(w time.Weekday) ETime
- func (et *ETime) Scan(value interface{}) error
- func (et *ETime) ScanLoc(value interface{}, loc *time.Location) error
- func (t ETime) StartOfDay() ETime
- func (t ETime) String() string
- func (t ETime) Sub(u ETime) time.Duration
- func (t ETime) ToTime() time.Time
- func (t *ETime) UnmarshalJSON(b []byte) error
- func (t ETime) Value() (driver.Value, error)
- type FixedPool
- type Float
- type ForEachField
- type Future
- type Heap
- type IndWritef
- type IndentWriter
- func (i *IndentWriter) DecrIndent()
- func (i *IndentWriter) IncrIndent()
- func (i *IndentWriter) NoIndWritef(pat string, args ...any) *IndentWriter
- func (i *IndentWriter) NoLbWritef(pat string, args ...any) *IndentWriter
- func (i *IndentWriter) NoLbWritefWhen(condition bool, pat string, args ...any) *IndentWriter
- func (i *IndentWriter) SetIndent(ind int)
- func (i *IndentWriter) StepIn(f func(iw *IndentWriter)) *IndentWriter
- func (i *IndentWriter) Writef(pat string, args ...any) *IndentWriter
- type Integer
- type Introspector
- func (it *Introspector) Field(fieldName string) (field reflect.StructField, isFieldFound bool)
- func (it *Introspector) FieldAt(idx int) (field reflect.StructField)
- func (it *Introspector) FieldIdx(fieldName string) (index int, isFieldFound bool)
- func (it *Introspector) IterFields(forEach ForEachField)
- func (it *Introspector) Tag(fieldName string, tagName string) (tag string, isFieldFound bool)
- func (it *Introspector) TagRetriever(fieldName string) (t TagRetriever, isFieldFound bool)
- type Number
- type Opt
- type Pair
- type Peek
- type Predicate
- type Queue
- type RWMap
- type SLPinter
- type Set
- type SignalOnce
- type Stack
- type StrPair
- type StrRWMap
- type StrSliceFlag
- type Supplier
- type TagRetriever
- type Transform
- type TransformAsync
- type Void
- type WalkFsFile
- type WalkTagCallback
- type WeightedItem
Constants ¶
const ( //lint:ignore U1000 ansi color code, keep it for future use ANSIRed = "\033[1;31m" ANSIGreen = "\033[1;32m" ANSICyan = "\033[1;36m" ANSIReset = "\033[0m" ANSIBlinkRed = "\033[1;5;31m" ANSIBlinkGreen = "\033[1;5;32m" ANSIBlinkCyan = "\033[1;5;36m" )
https://stackoverflow.com/questions/8357203/is-it-possible-to-display-text-in-a-console-with-a-strike-through-effect https://en.wikipedia.org/wiki/ANSI_escape_code
const ( // Default File Mode DefFileMode = 0666 GbUnit uint64 = MbUnit * 1024 MbUnit uint64 = KbUnit * 1024 KbUnit uint64 = 1024 )
const ( LoopbackLocalHost = "localhost" Loopback127 = "127.0.0.1" LocalIpAny = "0.0.0.0" )
const ( ClassicDateTimeLocaleFormat = "2006/01/02 15:04:05 (MST)" ClassicDateTimeFormat = "2006/01/02 15:04:05" StdDateTimeFormat = "2006-01-02 15:04:05" StdDateTimeMilliFormat = "2006-01-02 15:04:05.000" StdDateTimeLocaleFormat = "2006-01-02 15:04:05 (MST)" SQLDateTimeFormat = "2006-01-02 15:04:05.999999" SQLDateTimeFormatWithT = "2006-01-02T15:04:05.999999" SQLDateFormat = "2006-01-02" )
const ( BoolStrTrue = "true" BoolStrFalse = "false" )
const (
DEFAULT_LEN = 35
)
Variables ¶
var ( DebugLog func(pat string, args ...any) = func(pat string, args ...any) {} ErrorLog func(pat string, args ...any) = func(pat string, args ...any) { Printlnf("[Error] "+pat, args...) } )
var (
ErrGetTimeout = errors.New("future.TimedGet timeout")
)
Functions ¶
func AddETimeParseFormat ¶ added in v0.1.21
func AddETimeParseFormat(fmt ...string)
func AppendableFile ¶
Create appendable file with 0666 permission.
func CallerRunTaskWhenPoolFull ¶ added in v0.2.2
func CallerRunTaskWhenPoolFull() asyncPoolOption
func CliRun ¶
func CliRun(rail interface {
Infof(format string, args ...interface{})
Context() context.Context
}, executable string, args []string, opts ...func(*exec.Cmd)) (out []byte, err error)
CLI runs command.
If err is not nil, out may still contain output from the command.
func CollectTypeFields ¶
func CollectTypeFields(eleType reflect.Type) []reflect.StructField
Get Fields of A Type
func ContainsAnyStr ¶ added in v0.1.17
func CpuProfileFunc ¶ added in v0.1.13
func CsvReadAllIgnoreEmpty ¶ added in v0.2.8
func CutPrefixIgnoreCase ¶ added in v0.1.28
Cut prefix from s in a case-insensitive way.
func CutPrefixIgnoreCaseAny ¶ added in v0.2.10
Cut any prefix from s in a case-insensitive way.
func CutSuffixIgnoreCase ¶ added in v0.1.28
Cut suffix from s in a case-insensitive way.
func CutSuffixIgnoreCaseAny ¶ added in v0.2.10
Cut any suffix from s in a case-insensitive way.
func DebugNamedPrintlnf ¶ added in v0.1.5
func DebugPrintlnf ¶ added in v0.1.5
func DropTaskWhenPoolFull ¶ added in v0.2.2
func DropTaskWhenPoolFull() asyncPoolOption
func EqualAnyStr ¶ added in v0.1.17
func EscapeString ¶ added in v0.1.13
Escape String
Acknowledgement: following code is copied from https://github.com/pingcap/tidb/blob/master/pkg/util/sqlescape/utils.go (Copyright 2021 PingCAP, Inc. Apache License)
func ExecCmd ¶ added in v0.1.28
CLI runs command.
If err is not nil, out may still contain output from the command.
func FastDistinct ¶
Filter duplicate values, faster but values are sorted, and the slice values are filtered in place.
func FileAddSuffix ¶ added in v0.2.0
func FileChangeSuffix ¶ added in v0.2.11
func FileCutDotSuffix ¶ added in v0.2.8
func FileHasAnySuffix ¶ added in v0.2.0
func FileHasSuffix ¶ added in v0.1.27
func Filter ¶
Filter slice values in place.
Be cautious that both slices are backed by the same array.
func FindEmbedStruct ¶ added in v0.2.6
func FixedPoolFilterFunc ¶ added in v0.1.21
func FuzzParseTimeLoc ¶ added in v0.1.1
func GenId
deprecated
func GenId() (id string)
Generate Snowflake Id.
The id consists of 64 bits long + 6 digits machine_code. The 64 bits long consists of: sign bit (1 bit) + timestamp (49 bits, ~1487.583 years) + sequenceNo (14 bits, 0~16383).
The max value of Long is 9223372036854775807, which is a string with 19 characters, so the generated id will be of at most 25 characters.
This func is thread-safe.
Deprecated: Use [idutil.New] instead.
func GenIdP
deprecated
Generate Snowflake Id with extra prefix.
The id consists of 64 bits long + 6 digits machine_code. The 64 bits long consists of: sign bit (1 bit) + timestamp (49 bits, ~1487.583 years) + sequenceNo (14 bits, 0~16383).
The max value of Long is 9223372036854775807, which is a string with 19 characters, so the generated id will be of at most 25 characters.
This func is thread-safe.
Deprecated: Use [idutil.Id] instead.
func GetLocalIPV4 ¶ added in v0.1.8
func GetLocalIPV4() string
Get local ipv4 address (excluding loopback address)
func HasAnyPrefix ¶ added in v0.2.2
func HasAnySuffix ¶ added in v0.2.2
func HasPrefixIgnoreCase ¶
Check if s has the prefix in a case-insensitive way.
func HasSuffixIgnoreCase ¶
Check if s has the suffix in a case-insensitive way.
func IsBasicKind ¶ added in v0.2.0
func IsLocalAddress ¶ added in v0.1.8
Check whether the address is local (localhost/127.0.0.1)
func MapCopy ¶ added in v0.2.1
func MapCopy[T comparable, V any](v map[T]V) map[T]V
func MatchPathAny ¶ added in v0.1.19
func MemoryProfileFunc ¶ added in v0.1.13
func MergeSlice ¶ added in v0.1.1
func MergeSlice[K comparable, V any](vs []V, keyFunc func(v V) K) map[K][]V
Merge slice of items to a map.
func MergeSliceMap ¶ added in v0.2.12
func MergeSliceMap[K comparable, V any](vs []V, keyFunc func(v V) K) map[K]V
Merge slice of items to a map.
func MergeSliceMapAs ¶ added in v0.2.12
func MergeSliceMapAs[T any, K comparable, V any](ts []T, keyFunc func(t T) K, valueFunc func(t T) V) map[K]V
Merge slice of items to a map.
func MkdirParentAll ¶
MkdirAll but only for the parent directory of the path, perm 0755 is used.
The path should always point to a specific file under some directories, as this method always attempts to extract parent dir of the file. It the path fails to fulfill this requirement, the output might be unexpected.
func NamedPrintlnf ¶ added in v0.1.3
func NamedSprintf ¶ added in v0.1.2
Format message using named args, e.g., '${startTime} ${message}'
func NamedSprintfv ¶ added in v0.1.13
Format message using fields in struct, e.g., '${startTime} ${message}'
Equivalent to following code:
NamedSprintf(pat, ReflectGenMap(myStruct))
func NewSubmitAsyncFunc ¶
func NewSubmitAsyncFunc[T any](pool AsyncPoolItf) func(task func() (T, error)) Future[T]
Create func that calls SubmitAsync(...) with the given pool.
func NewSyncSlice ¶ added in v0.2.11
func OpenRWFile ¶ added in v0.1.27
Open readable & writable file with 0666 permission.
func PanicSafeFunc ¶ added in v0.1.1
func PanicSafeFunc(op func()) func()
func PanicSafeRun ¶ added in v0.2.4
func PanicSafeRun(op func())
func ParseClassicDateTime ¶ added in v0.1.1
Parse classic datetime format using patterns: "2006-01-02 15:04:05", "2006/01/02 15:04:05".
func QuoteStrSlice ¶ added in v0.2.2
func RandAlpha ¶
Generate random alphabetic string with specified length
the generated string will contains [a-zA-Z]
func RandLowerAlpha ¶
Generate random alphabetic, lowercase string with specified length
the generated string will contains [a-z]
func RandLowerAlphaNumeric ¶
Generate random alphabetic, lowercase string with specified length
the generated string will contains [a-z0-9]
func RandLowerAlphaNumeric16 ¶
func RandLowerAlphaNumeric16() string
Same as RandLowerAlphaNumeric(16) but with less allocation.
func RandNum ¶
Generate random numeric string with specified length
the generated string will contains [0-9]
func RandStr ¶
Generate random string with specified length
the generated string will contains [a-zA-Z0-9]
ERand() is preferred for higher entrophy
func RandUpperAlpha ¶
Generate random alphabetic, uppercase string with specified length
the generated string will contains [A-Z]
func RandUpperAlphaNumeric ¶
Generate random alphabetic, uppercase string with specified length
the generated string will contains [A-Z0-9]
func ReadWriteFile ¶
Create readable & writable file with 0666 permission.
If file is missing, new empty file is created.
func ReflectFuncName ¶ added in v0.1.13
func ReflectGenMap ¶ added in v0.1.13
Construct Struct/Interface/Pointer values to map[string]any.
This method doesn't convert recursively.
func RunPyScript ¶ added in v0.1.28
func RunPyScript(pyExec string, pyContent string, args []string, opts ...func(*exec.Cmd)) (out []byte, err error)
Run python script.
Python executable must be available beforehand.
func SAddLineIndent ¶ added in v0.1.9
func SaveTmpFile ¶ added in v0.1.1
Save to temp file, returns temp file path or error.
func SetETimeMarshalFormat ¶ added in v0.1.19
func SetETimeMarshalFormat(fmt string)
func SetMachineCode ¶
Overwrite the randomly generated machine code, machine code must be between 0 and 999999, at most 6 digits.
func ShuffleRunes ¶
func ShuffleStr ¶
func SliceFilterFirst ¶
Select one from the slice that matches the condition.
func SliceFirst ¶ added in v0.1.14
func SliceRemove ¶ added in v0.1.6
func SnowflakeId ¶ added in v0.2.8
func SnowflakeId() (id string)
Generate Snowflake Id
The id consists of [64 bits long] + [6 digits machine_code] The 64 bits long consists of: [sign bit (1 bit)] + [timestamp (49 bits, ~1487.583 years)] + [sequenceNo (14 bits, 0~16383)]
The max value of Long is 9223372036854775807, which is a string with 19 characters, so the generated id will be of at most 25 characters ¶
This func is thread-safe
func SplitKV ¶ added in v0.1.5
Splist kv pair. Returns false if token is not found or key is absent.
func SplitSubSlices ¶ added in v0.2.6
func StrSliceMap ¶ added in v0.1.26
func StrSliceMap[T any, V any](l []T, keyMapper func(T) string, valueMapper func(T) V) map[string][]V
Build a map with string type key and slice value of any type
func TempFilePath ¶ added in v0.2.1
func TempFilePathSuffix ¶ added in v0.2.6
func TermOpenUrl ¶
func TrimStrSlice ¶ added in v0.1.23
func TrimStrSlice(s []string)
func TryFileExists ¶ added in v0.2.2
Check if file exists without returning error.
This is mainly a lazy version of FileExists(), it's not recommended for most cases.
func UnquoteStr ¶ added in v0.1.17
func UnsafeByt2Str ¶
Convert []byte to string without alloc.
Both the []byte and the string share the same memory.
Any modification on the original []byte is reflected on the returned string.
byt = []byte("abc")
s = UnsafeByt2Str(byt) // "abc" using the same memory
byt[0] = 'd' // modified in place at 0, also reflected on s ("dbc")
Tricks from https://github.com/valyala/fasthttp and https://go101.org/article/unsafe.html
func UnsafeStr2Byt ¶
Convert string to []byte without alloc.
Both the []byte and the string share the same memory.
The resulting []byte is not modifiable, program will panic if modified.
s := "abc" byt := UnsafeStr2Byt(s) // "abc" but in []byte byt[0] = 'd' // will panic
Tricks from https://github.com/valyala/fasthttp and https://go101.org/article/unsafe.html
func UpdateSliceValue ¶ added in v0.2.7
func UpdateSliceValue[T any](s []T, upd func(t T) T)
func WalkTagShallow ¶
func WalkTagShallow(ptr any, callbacks ...WalkTagCallback) error
Walk fields of *struct, won't go deeper even if the field is a struct.
func WeightedRandPick ¶ added in v0.1.11
func WeightedRandPick[T interface{ GetWeight() float64 }](s []T) T
Types ¶
type AntsAsyncPool ¶ added in v0.2.10
type AntsAsyncPool struct {
// contains filtered or unexported fields
}
func (*AntsAsyncPool) Go ¶ added in v0.2.10
func (a *AntsAsyncPool) Go(f func()) error
func (*AntsAsyncPool) Stop ¶ added in v0.2.10
func (a *AntsAsyncPool) Stop()
func (*AntsAsyncPool) StopAndWait ¶ added in v0.2.10
func (a *AntsAsyncPool) StopAndWait()
type AsyncPool ¶
type AsyncPool struct {
// contains filtered or unexported fields
}
A long live, bounded pool of goroutines.
Use miso.NewAsyncPool to create a new pool.
AsyncPool internally maintains a task queue with limited size and limited number of workers.
By default, if the task queue is full and all workers are busy, the caller of *AsyncPool.Go is blocked indefinitively until the task can be processed. You can use DropTaskWhenPoolFull or CallerRunTaskWhenPoolFull to change this behaviour.
func NewAsyncPool ¶
Create a bounded pool of goroutines.
The maxTasks determines the capacity of the task queues.
The maxWorkers determines the max number of workers.
By default, if the task queue is full and all workers are busy, the caller of *AsyncPool.Go is blocked indefinitively until the task can be processed. You can use DropTaskWhenPoolFull or CallerRunTaskWhenPoolFull to change this behaviour.
func (*AsyncPool) Go ¶
Submit task to the pool.
If the pool is closed, caller will execute the submitted task directly.
func (*AsyncPool) Stop ¶ added in v0.1.10
func (p *AsyncPool) Stop()
Stop the pool.
Once the pool is stopped, new tasks submitted are executed directly by the caller.
func (*AsyncPool) StopAndWait ¶ added in v0.1.10
func (p *AsyncPool) StopAndWait()
Stop the pool and wait until existing workers drain all the remaining tasks.
Once the pool is stopped, new tasks submitted are executed directly by the caller.
type AsyncPoolItf ¶ added in v0.2.10
type AsyncPoolItf interface {
Go(f func()) error
Stop()
StopAndWait()
}
func NewAntsAsyncPool ¶ added in v0.2.10
func NewAntsAsyncPool(maxWorkers int, opts ...asyncPoolOption) AsyncPoolItf
Create a bounded pool of goroutines.
The maxTasks determines the capacity of the task queues.
The maxWorkers determines the max number of workers.
By default, if the task queue is full and all workers are busy, the caller of AsyncPoolItf.Go() is blocked indefinitively until the task can be processed. You can use DropTaskWhenPoolFull or CallerRunTaskWhenPoolFull to change this behaviour.
func NewCpuAsyncPool ¶ added in v0.1.11
func NewCpuAsyncPool() AsyncPoolItf
Create AsyncPool with number of workers equals to 4 * num_cpu.
func NewIOAsyncPool ¶ added in v0.1.11
func NewIOAsyncPool() AsyncPoolItf
Create AsyncPool with number of workers equals to 8 * num_cpu and a task queue of size 500.
type AwaitFutures ¶
type AwaitFutures[T any] struct { // contains filtered or unexported fields }
AwaitFutures represent tasks that are submitted to the pool asynchronously whose results are awaited together.
AwaitFutures should only be used once for the same group of tasks.
Use miso.NewAwaitFutures() to create one.
func NewAwaitFutures ¶
func NewAwaitFutures[T any](pool AsyncPoolItf) *AwaitFutures[T]
Create new AwaitFutures for a group of tasks.
*AsyncPool is optional, provide nil if not needed.
func (*AwaitFutures[T]) Await ¶
func (a *AwaitFutures[T]) Await() []Future[T]
Await results of all tasks.
func (*AwaitFutures[T]) AwaitAnyErr ¶ added in v0.1.2
func (a *AwaitFutures[T]) AwaitAnyErr() error
Await results of all tasks and return any error that is found in the task Futures.
func (*AwaitFutures[T]) AwaitResultAnyErr ¶ added in v0.2.0
func (a *AwaitFutures[T]) AwaitResultAnyErr() ([]T, error)
Await results of all tasks and return any error that is found in the task Futures.
func (*AwaitFutures[T]) SubmitAsync ¶
func (a *AwaitFutures[T]) SubmitAsync(task func() (T, error))
Submit task to AwaitFutures.
type BatchTask ¶ added in v0.1.16
func NewBatchTask ¶ added in v0.1.16
func NewBatchTask[T any, V any](parallel int, bufferSize int, consumer func(T) (V, error)) *BatchTask[T, V]
Create a batch of concurrent task for one time use.
func (*BatchTask[T, V]) Close ¶ added in v0.1.16
func (b *BatchTask[T, V]) Close()
Close underlying pipeline channel without waiting.
func (*BatchTask[T, V]) Generate ¶ added in v0.1.16
func (b *BatchTask[T, V]) Generate(task T)
Generate task.
func (*BatchTask[T, V]) Wait ¶ added in v0.1.16
func (b *BatchTask[T, V]) Wait() []BatchTaskResult[V]
Wait until all generated tasks are completed and close pipeline channel.
type BatchTaskResult ¶ added in v0.1.19
type ByteBufPool ¶ added in v0.1.2
type ByteBufPool struct {
MaxCap int // default max cap is 4096 bytes.
// contains filtered or unexported fields
}
func NewByteBufferPool ¶ added in v0.1.2
func NewByteBufferPool(initCap int) *ByteBufPool
func (*ByteBufPool) Get ¶ added in v0.1.2
func (b *ByteBufPool) Get() *bytes.Buffer
func (*ByteBufPool) Put ¶ added in v0.1.2
func (b *ByteBufPool) Put(buf *bytes.Buffer)
type Complex ¶ added in v0.2.0
type Complex interface {
~complex64 | ~complex128
}
type ETime ¶
ETime enhanced wrapper of time.Time.
This type implements sql.Scanner and driver.Valuer, and thus can be safely used in GORM just like time.Time. It also implements json/encoding Marshaler and Unmarshaler to support json marshalling (in forms of epoch milliseconds 'by default').
In previous releases, ETime was a type alias to time.Time. Since v0.1.2, ETime embeds time.Time to access all of it's methods.
To cast from time.Time to ETime, use ToETime() method. To cast from ETime to time.Time, use ETime.ToTime() method.
func MayParseETime ¶ added in v0.1.25
func ParseETime ¶ added in v0.1.24
func (ETime) FormatClassic ¶
func (ETime) FormatClassicLocale ¶
func (ETime) FormatDate ¶ added in v0.1.1
func (ETime) FormatStdLocale ¶ added in v0.1.14
func (ETime) FormatStdMilli ¶ added in v0.1.14
func (ETime) MarshalJSON ¶
Implements encoding/json Marshaler
func (*ETime) UnmarshalJSON ¶
Implements encoding/json Unmarshaler.
type FixedPool ¶ added in v0.1.21
type FixedPool[T any] struct { // contains filtered or unexported fields }
func NewFixedPool ¶ added in v0.1.21
type ForEachField ¶
type ForEachField func(index int, field reflect.StructField) (breakIteration bool)
type Future ¶
type Future[T any] interface { // Get result without timeout. Get() (T, error) // Get result with timeout, returns ErrGetTimeout if timeout exceeded. TimedGet(timeout int) (T, error) // Then callback to be invoked when the Future is completed. // // Then callback should only be set once for every Future. Then(tf func(T, error)) }
Result of a asynchronous task.
func NewCompletedFuture ¶ added in v0.1.25
func SubmitAsync ¶
func SubmitAsync[T any](pool AsyncPoolItf, task func() (T, error)) Future[T]
Create Future, once the future is created, it starts running on a saperate goroutine from the pool.
type Heap ¶ added in v0.1.14
type Heap[T any] struct { // contains filtered or unexported fields }
type IndentWriter ¶
func NewIndentWriter ¶
func NewIndentWriter(indentStr string) IndentWriter
func (*IndentWriter) DecrIndent ¶ added in v0.1.4
func (i *IndentWriter) DecrIndent()
func (*IndentWriter) IncrIndent ¶ added in v0.1.4
func (i *IndentWriter) IncrIndent()
func (*IndentWriter) NoIndWritef ¶ added in v0.1.4
func (i *IndentWriter) NoIndWritef(pat string, args ...any) *IndentWriter
Writef without indentation and with line break.
func (*IndentWriter) NoLbWritef ¶ added in v0.1.4
func (i *IndentWriter) NoLbWritef(pat string, args ...any) *IndentWriter
Writef with indentation and without line break.
func (*IndentWriter) NoLbWritefWhen ¶ added in v0.1.21
func (i *IndentWriter) NoLbWritefWhen(condition bool, pat string, args ...any) *IndentWriter
NoLbWritef(..) when condition is true else Writef(..).
func (*IndentWriter) SetIndent ¶ added in v0.1.4
func (i *IndentWriter) SetIndent(ind int)
func (*IndentWriter) StepIn ¶
func (i *IndentWriter) StepIn(f func(iw *IndentWriter)) *IndentWriter
func (*IndentWriter) Writef ¶
func (i *IndentWriter) Writef(pat string, args ...any) *IndentWriter
type Introspector ¶
type Introspector struct {
Type reflect.Type
Fields []reflect.StructField
// contains filtered or unexported fields
}
func (*Introspector) Field ¶
func (it *Introspector) Field(fieldName string) (field reflect.StructField, isFieldFound bool)
Get field by name
func (*Introspector) FieldAt ¶
func (it *Introspector) FieldAt(idx int) (field reflect.StructField)
Get field at index
func (*Introspector) FieldIdx ¶
func (it *Introspector) FieldIdx(fieldName string) (index int, isFieldFound bool)
Get field index
func (*Introspector) IterFields ¶
func (it *Introspector) IterFields(forEach ForEachField)
Iterate fields
func (*Introspector) Tag ¶
func (it *Introspector) Tag(fieldName string, tagName string) (tag string, isFieldFound bool)
Get tag by of field
func (*Introspector) TagRetriever ¶
func (it *Introspector) TagRetriever(fieldName string) (t TagRetriever, isFieldFound bool)
Get tag retriever for a field
type Queue ¶ added in v0.1.12
type Queue[T any] struct { // contains filtered or unexported fields }
type RWMap ¶
type RWMap[K comparable, V any] struct { // contains filtered or unexported fields }
Map with sync.RWMutex embeded.
func (*RWMap[K, V]) PutIfAbsent ¶ added in v0.1.12
func (r *RWMap[K, V]) PutIfAbsent(k K, f func() V)
type Set ¶
type Set[T comparable] struct { // Keys in Set Keys map[T]Void }
Set data structure
It's internally backed by a Map.
To create a new Set, use NewSet() func.
func NewSetFromSlice ¶ added in v0.1.13
func NewSetFromSlice[T comparable](ts []T) Set[T]
Create new Set from slice
func NewSetPtr ¶ added in v0.2.1
func NewSetPtr[T comparable](keys ...T) *Set[T]
Create ptr to a new Set
type SignalOnce ¶ added in v0.1.13
type SignalOnce struct {
// contains filtered or unexported fields
}
func NewSignalOnce ¶ added in v0.1.13
func NewSignalOnce() *SignalOnce
func (*SignalOnce) Closed ¶ added in v0.1.13
func (s *SignalOnce) Closed() bool
func (*SignalOnce) Notify ¶ added in v0.1.13
func (s *SignalOnce) Notify()
func (*SignalOnce) TimedWait ¶ added in v0.1.13
func (s *SignalOnce) TimedWait(timeout time.Duration) (isTimeout bool)
func (*SignalOnce) Wait ¶ added in v0.1.13
func (s *SignalOnce) Wait()
type Stack ¶ added in v0.1.3
type Stack[T any] struct { // contains filtered or unexported fields }
type StrRWMap ¶ added in v0.1.25
type StrRWMap[V any] struct { // contains filtered or unexported fields }
func NewStrRWMap ¶ added in v0.1.25
Create new sharded, concurrent access StrRWMap.
func (*StrRWMap[V]) PutIfAbsent ¶ added in v0.1.25
type StrSliceFlag ¶
type StrSliceFlag []string
func FlagStrSlice ¶
func FlagStrSlice(name string, usage string) *StrSliceFlag
func (*StrSliceFlag) Set ¶
func (s *StrSliceFlag) Set(t string) error
func (*StrSliceFlag) String ¶
func (s *StrSliceFlag) String() string
type TagRetriever ¶
type TransformAsync ¶ added in v0.1.16
Transform t to another t
type WalkFsFile ¶ added in v0.2.6
type WalkTagCallback ¶
type WeightedItem ¶ added in v0.1.11
func (WeightedItem[T]) GetWeight ¶ added in v0.1.11
func (w WeightedItem[T]) GetWeight() float64