Documentation
¶
Index ¶
- Constants
- Variables
- func AddETimeParseFormat(fmt ...string)
- func AppendableFile(name string) (*os.File, error)
- func CallerRunTaskWhenPoolFull() asyncPoolOption
- func CpuProfileFunc(file string, fu func()) error
- func DropTaskWhenPoolFull() asyncPoolOption
- func ERand(len int) string
- func EscapeString(s 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 FindTestdata(t *testing.T, relativePath string) string
- func FixedPoolFilterFunc[T any](filterFunc func(t T) (dropped bool)) func(*FixedPool[T])
- 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 IsLocalAddress(address string) bool
- func IsVoid(t reflect.Type) bool
- func MaxInt(a int, b int) int
- func MemoryProfileFunc(file string, fu func()) error
- func MinInt(a int, b int) int
- func MkdirAll(path string) error
- func MkdirParentAll(path string) error
- func MkdirTree(t DirTree) error
- func Must(err error)
- func MustGet[V any](v V, err error) V
- func NewSubmitAsyncFunc[T any](pool AsyncPoolItf) func(task func() (T, error)) Future[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 PanicSafeErrFunc(op func() error) func() error
- func PanicSafeFunc(op func()) func()
- func PanicSafeRun(op func())
- func PanicSafeRunErr(op func() error) error
- func ParseClassicDateTime(val string, loc *time.Location) (time.Time, error)
- func Pick(set []rune) rune
- 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 SaveTmpFile(tmpDir string, reader io.Reader) (string, error)
- func SetETimeMarshalFormat(fmt string)
- func SetMachineCode(code int) error
- func ShuffleRunes(letters []rune, times int) []rune
- func ShuffleStr(letters string, times int) string
- func SnowflakeId() (id string)
- func StrByteLen(s string) int
- func TempFile() (*os.File, error)
- func TempFilePath() (string, error)
- func TempFilePathSuffix(suffix string) (string, error)
- func TempFileSuffix(suffix string) (*os.File, error)
- func TryFileExists(path string) bool
- func UnsafeByt2Str(b []byte) string
- func UnsafeStr2Byt(s string) (b []byte)
- 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 DirTree
- type ETime
- type FixedPool
- type Float
- type Future
- type Integer
- type Number
- type Peek
- type Predicate
- type SignalOnce
- type Supplier
- type Time
- func (t Time) Add(d time.Duration) Time
- func (t Time) AddDate(years int, months int, days int) Time
- func (t Time) After(u Time) bool
- func (t Time) Before(u Time) bool
- func (t Time) EndOfDay() Time
- func (t Time) EndOfMonth() Time
- func (t Time) FormatClassic() string
- func (t Time) FormatClassicLocale() string
- func (t Time) FormatDate() string
- func (t Time) FormatRFC3339() string
- func (t Time) FormatRFC3339Nano() string
- func (t Time) FormatStd() string
- func (t Time) FormatStdLocale() string
- func (t Time) FormatStdMilli() string
- func (t Time) GoString() string
- func (t Time) In(z *time.Location) Time
- func (t Time) InZone(diffInHours int) Time
- func (t Time) LastWeekday(w time.Weekday) Time
- func (t Time) MarshalJSON() ([]byte, error)
- func (t Time) NextWeekday(w time.Weekday) Time
- func (t Time) StartOfDay() Time
- func (t Time) StartOfMonth() Time
- func (t Time) String() string
- func (t Time) Sub(u Time) time.Duration
- func (t Time) ToTime() time.Timedeprecated
- func (t *Time) UnmarshalJSON(b []byte) error
- func (t Time) Unwrap() time.Time
- func (t Time) Value() (driver.Value, error)
- type Transform
- type TransformAsync
- type Void
- type WalkFsFile
- type WeightedItem
Constants ¶
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 (
DEFAULT_LEN = 35
)
Variables ¶
var (
ErrGetTimeout = errors.New("future.TimedGet timeout")
)
var (
Printlnf = cli.Printlnf
)
var (
ToETime = WrapTime
)
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 CpuProfileFunc ¶ added in v0.1.13
func DropTaskWhenPoolFull ¶ added in v0.2.2
func DropTaskWhenPoolFull() asyncPoolOption
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 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 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 IsLocalAddress ¶ added in v0.1.8
Check whether the address is local (localhost/127.0.0.1)
func MemoryProfileFunc ¶ added in v0.1.13
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 NewSubmitAsyncFunc ¶
func NewSubmitAsyncFunc[T any](pool AsyncPoolItf) func(task func() (T, error)) Future[T]
Create func that calls SubmitAsync(...) with the given pool.
func OpenRWFile ¶ added in v0.1.27
Open readable & writable file with 0666 permission.
func PanicSafeErrFunc ¶ added in v0.3.2
func PanicSafeFunc ¶ added in v0.1.1
func PanicSafeFunc(op func()) func()
func PanicSafeRun ¶ added in v0.2.4
func PanicSafeRun(op func())
func PanicSafeRunErr ¶ added in v0.3.2
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 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 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 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 TempFilePath ¶ added in v0.2.1
func TempFilePathSuffix ¶ added in v0.2.6
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 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 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 ¶
type ETime = Time
func MayParseETime ¶ added in v0.1.25
func ParseETime ¶ added in v0.1.24
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 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 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 Time ¶ added in v0.3.1
Enhanced wrapper of time.Time.
This type implements sql.Scanner and driver.Valuer, it can be safely used in GORM just like time.Time.
It also implements json/encoding Marshaler and Unmarshaler to support json marshalling.
In previous releases, Time was a type alias to time.Time. Since v0.1.2, Time embeds time.Time to access all of it's methods.
To cast from time.Time to Time, use WrapTime method. To cast from Time to time.Time, use Time.Unwrap method.
By default, Time support following unmarshaling formats:
- time.RFC3339
- time.RFC3339Nano
- 2006-01-02 15:04:05.999999
- 2006-01-02
- 2006-01-02T15:04:05.999999
- millseconds since unix epoch
- seconds since unix epoch
By default, Time is marshaled as millseconds since unix epoch. You can change this behaviour though SetETimeMarshalFormat.
func (Time) EndOfMonth ¶ added in v0.3.2
func (Time) FormatClassic ¶ added in v0.3.1
Format as 2006/01/02 15:04:05
func (Time) FormatClassicLocale ¶ added in v0.3.1
Format as 2006/01/02 15:04:05 (MST)
func (Time) FormatRFC3339 ¶ added in v0.3.2
Format as time.RFC3339
func (Time) FormatRFC3339Nano ¶ added in v0.3.2
Format as time.RFC3339Nano
func (Time) FormatStdLocale ¶ added in v0.3.1
Format as 2006-01-02 15:04:05 (MST)
func (Time) FormatStdMilli ¶ added in v0.3.1
Format as 2006-01-02 15:04:05.000
func (Time) MarshalJSON ¶ added in v0.3.1
Implements encoding/json Marshaler
func (Time) StartOfMonth ¶ added in v0.3.2
func (Time) ToTime
deprecated
added in
v0.3.1
Deprecated: change to Time.Unwrap.
func (*Time) UnmarshalJSON ¶ added in v0.3.1
Implements encoding/json Unmarshaler.
type TransformAsync ¶ added in v0.1.16
Transform t to another t
type WalkFsFile ¶ added in v0.2.6
type WeightedItem ¶ added in v0.1.11
func (WeightedItem[T]) GetWeight ¶ added in v0.1.11
func (w WeightedItem[T]) GetWeight() float64