utils

package
v1.3.2 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2024 License: AGPL-3.0 Imports: 87 Imported by: 0

Documentation

Overview

Package bytefmt contains helper methods and constants for converting to and from a human-readable byte format.

bytefmt.ByteSize(100.5*bytefmt.MEGABYTE) // "100.5M"
bytefmt.ByteSize(uint64(1024)) // "1K"

sshclient implements an ssh client

Index

Examples

Constants

View Source
const (
	BYTE = 1 << (10 * iota)
	KILOBYTE
	MEGABYTE
	GIGABYTE
	TERABYTE
	PETABYTE
	EXABYTE
)
View Source
const (
	// ItemNotExpire Will avoid the item being expired by TTL, but can still be exired by callback etc.
	ItemNotExpire time.Duration = -1
	// ItemExpireWithGlobalTTL will use the global TTL when set.
	ItemExpireWithGlobalTTL time.Duration = 0
)
View Source
const (
	AllSepcialChars = ",./<>?;':\"[]{}`~!@#$%^&*()_+-=\\|"
	LittleChar      = "abcdefghijklmnopqrstuvwxyz"
	BigChar         = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	NumberChar      = "1234567890"
)
View Source
const CRLF = "\r\n"
View Source
const DefaultDateFormat = "2006-01-02"
View Source
const DefaultTimeFormat = "2006_01_02-15_04_05"
View Source
const DefaultTimeFormat2 = "20060102_15_04_05"

Variables

View Source
var BashCompleteScriptTpl = `` /* 1147-byte string literal not displayed */
View Source
var ErrClosedPipe = errors.New("bufpipe: read/write on closed pipe")

ErrClosedPipe is the error used for read or write operations on a closed pipe.

View Source
var GBKSafeString = codec.GBKSafeString
View Source
var GbkToUtf8 = codec.GbkToUtf8
View Source
var ParseStringToInts = ParseStringToPorts
View Source
var (
	TargetIsLoopback = Errorf("loopback")
)
View Source
var Utf8ToGbk = codec.Utf8ToGbk
View Source
var WaitBySignal = func(fn func(), sigs ...os.Signal) {
	sigC := NewSignalChannel(sigs...)
	defer signal.Stop(sigC)

	for {
		select {
		case <-sigC:
			log.Warn("recv signal abort")
			fn()
			return
		}
	}
}
View Source
var WaitReleaseBySignal = func(fn func()) {
	sigC := NewSignalChannel(os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
	defer signal.Stop(sigC)

	for {
		select {
		case <-sigC:
			log.Warn("recv signal abort")
			fn()
			return
		}
	}
}
View Source
var ZshCompleteScriptTpl = `` /* 1072-byte string literal not displayed */

Functions

func AddressFamilyUint32ToString

func AddressFamilyUint32ToString(i uint32) string

func AppendDefaultPort added in v1.2.3

func AppendDefaultPort(raw string, port int) string

AppendDefaultPort returns host:port format. If the port is already specified in the host, it will be returned directly. wss -> 443 ws -> 80 http -> 80 https -> 443

func AsDebugString added in v1.2.9

func AsDebugString(i interface{}, raws ...bool) string

func AsciiBytesToRegexpMatchedRunes

func AsciiBytesToRegexpMatchedRunes(in []byte) []rune

func AsciiBytesToRegexpMatchedString

func AsciiBytesToRegexpMatchedString(in []byte) string

func AsciiEqualFold

func AsciiEqualFold(s, t string) bool

AsciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t are equal, ASCII-case-insensitively.

func AsciiToLower

func AsciiToLower(s string) (lower string, ok bool)

asciiToLower returns the lowercase version of s if s is ASCII and printable, and whether or not it was.

func BKDRHash

func BKDRHash(str []byte) uint32

BKDR Hash Function

func BufioReadLine

func BufioReadLine(reader *bufio.Reader) ([]byte, error)

func BufioReadLineString added in v1.3.0

func BufioReadLineString(reader *bufio.Reader) (string, error)

func ByteCountBinary

func ByteCountBinary(b int64) string

func ByteCountDecimal

func ByteCountDecimal(b int64) string

func ByteSize

func ByteSize(bytes uint64) string

ByteSize returns a human-readable byte string of the form 10M, 12.5K, and so forth. The following units are available:

E: Exabyte
P: Petabyte
T: Terabyte
G: Gigabyte
M: Megabyte
K: Kilobyte
B: Byte

The unit that results in the smallest number greater than or equal to 1 is always chosen.

func BytesClone

func BytesClone(raw []byte) (newBytes []byte)

func CacheFunc added in v1.2.7

func CacheFunc[T any](t time.Duration, f func() (T, error)) func() (T, error)

CacheFunc do cache and retry It's used for unstable func.

func CalcFaviconHash

func CalcFaviconHash(urlRaw string) (string, error)

func CalcMd5

func CalcMd5(items ...interface{}) string

func CalcSSDeepStability

func CalcSSDeepStability(req ...[]byte) (float64, error)

CalcSSDeepStability 使用模糊哈希算法计算多段文本之间的相似度,返回相似度与错误。传入的文本应该为大文本,即长度大于 30 kb。 Example: ``` p, err = str.CalcSSDeepStability(str.RandStr(100000), str.RandStr(100000)) ```

func CalcSha1

func CalcSha1(items ...interface{}) string

func CalcSha1WithSuffix

func CalcSha1WithSuffix(items []interface{}, suffix string) string

func CalcSha256 added in v1.2.8

func CalcSha256(items ...interface{}) string

func CalcSimHashStability

func CalcSimHashStability(req ...[]byte) (float64, error)

CalcSimHashStability 使用 SimHash 算法计算多段文本之间的相似度,返回相似度与错误。 Example: ``` p, err = str.CalcSimHashStability("hello", "hello world") // p = 0.96484375 ```

func CalcSimilarity

func CalcSimilarity(raw ...[]byte) float64

CalcSimilarity 计算多段文本之间的相似度,根据最长的文本长度选择不同的算法 如果最长的文本长度小于等于 2000,使用文本子串匹配算法 如果最短的文本长度大于等于 30000,使用模糊哈希算法 如果上述算法出现错误,则使用 SimHash 算法 Example: ``` str.CalcSimilarity("hello", "hello world") // 0.625 ```

func CalcTextSubStringStability

func CalcTextSubStringStability(raw ...[]byte) (float64, error)

CalcTextMaxSubStrStability 使用文本子串匹配算法计算多段文本之间的相似度,返回相似度与错误 Example: ``` p, err = str.CalcTextMaxSubStrStability("hello", "hello world") // p = 0.625 ```

func CallWithCtx added in v1.2.9

func CallWithCtx(ctx context.Context, cb func()) error

func CallWithTimeout added in v1.2.9

func CallWithTimeout(timeout float64, cb func()) error

func ChanStringToSlice

func ChanStringToSlice(c chan string) (result []string)

func ConcatPorts

func ConcatPorts(ports []int) string

func ConcurrentCopyDirectory added in v1.2.9

func ConcurrentCopyDirectory(source string, destination string, threads int) error

func ConnExpect

func ConnExpect(c net.Conn, timeout time.Duration, callback func([]byte) bool) (bool, error)

func ConvertTextFileToYakFuzztagByPath

func ConvertTextFileToYakFuzztagByPath(file_bin_path string) (string, error)

func ConvertToStringSlice

func ConvertToStringSlice(raw ...interface{}) (r []string)

func CopyBytes

func CopyBytes(rsp []byte) []byte

func CopyDirectory added in v1.2.9

func CopyDirectory(source string, destination string) error

func CopyFile added in v1.2.8

func CopyFile(source, destination string) error

func CopyMapInterface

func CopyMapInterface(i map[string]interface{}) map[string]interface{}

func DataVerbose

func DataVerbose(i interface{}) string

func DatetimePretty

func DatetimePretty() string

func DatetimePretty2

func DatetimePretty2() string

func Debug

func Debug(f func())

func DebugMockEchoWs added in v1.3.1

func DebugMockEchoWs(point string) (string, int)

func DebugMockGMHTTP added in v1.2.3

func DebugMockGMHTTP(ctx context.Context, handler func(req []byte) []byte) (string, int)

func DebugMockHTTP

func DebugMockHTTP(rsp []byte) (string, int)

func DebugMockHTTP2 added in v1.2.3

func DebugMockHTTP2(ctx context.Context, handler func(req []byte) []byte) (string, int)

func DebugMockHTTPEx added in v1.2.3

func DebugMockHTTPEx(handle func(req []byte) []byte) (string, int)

func DebugMockHTTPExContext added in v1.2.3

func DebugMockHTTPExContext(ctx context.Context, handle func(req []byte) []byte) (string, int)

func DebugMockHTTPHandlerFunc added in v1.2.4

func DebugMockHTTPHandlerFunc(handlerFunc http.HandlerFunc) (string, int)

func DebugMockHTTPHandlerFuncContext added in v1.2.4

func DebugMockHTTPHandlerFuncContext(ctx context.Context, handlerFunc http.HandlerFunc) (string, int)

func DebugMockHTTPKeepAliveEx added in v1.3.1

func DebugMockHTTPKeepAliveEx(handle func(req []byte) []byte) (string, int)

func DebugMockHTTPS added in v1.2.9

func DebugMockHTTPS(rsp []byte) (string, int)

func DebugMockHTTPSEx added in v1.2.3

func DebugMockHTTPSEx(handle func(req []byte) []byte) (string, int)

func DebugMockHTTPSKeepAliveEx added in v1.2.7

func DebugMockHTTPSKeepAliveEx(handle func(req []byte) []byte) (string, int)

func DebugMockHTTPServerWithContext added in v1.2.3

func DebugMockHTTPServerWithContext(ctx context.Context, https, h2, gmtlsFlag, onlyGmtls, keepAlive bool, handle func([]byte) []byte) (string, int)

func DebugMockHTTPServerWithContextWithAddress added in v1.3.0

func DebugMockHTTPServerWithContextWithAddress(ctx context.Context, addr string, https, h2, gmtlsFlag, onlyGmtls, keepAlive bool, handle func([]byte) []byte) (string, int)

func DebugMockHTTPWithTimeout

func DebugMockHTTPWithTimeout(du time.Duration, rsp []byte) (string, int)

func DebugMockOnlyGMHTTP added in v1.3.1

func DebugMockOnlyGMHTTP(ctx context.Context, handler func(req []byte) []byte) (string, int)

func DebugMockTCP added in v1.2.7

func DebugMockTCP(rsp []byte) (string, int)

func DebugMockTCPEx added in v1.2.7

func DebugMockTCPEx(handleFunc handleTCPFunc) (string, int)

func DebugMockTCPHandlerFuncContext added in v1.2.7

func DebugMockTCPHandlerFuncContext(ctx context.Context, handlerFunc handleTCPFunc) (string, int)

func DebugMockWs added in v1.3.1

func DebugMockWs(handler func(conn *websocket.Conn)) (string, int)

func DomainToURLFilter

func DomainToURLFilter(domain string) (*regexp.Regexp, error)

func DownloadFile

func DownloadFile(client *http.Client, u string, localFile string, every1s ...func(float64)) error

func DumpFileWithTextAndFiles

func DumpFileWithTextAndFiles(raw string, divider string, files ...string) (string, error)

func DumpHTTPRequest added in v1.2.6

func DumpHTTPRequest(req *http.Request, loadBody bool) ([]byte, error)

DumpHTTPRequest dumps http request to bytes **NO NOT HANDLE SMUGGLE HERE!** Transfer-Encoding is handled vai req.TransferEncoding / req.Header["Transfer-Encoding"] Content-Length is handled vai req.ContentLength / req.Header["Content-Length"] if Transfer-Encoding existed, check body chunked? if not, encode it if Transfer-Encoding and Content-Length existed at same time, use transfer-encoding

func DumpHTTPResponse added in v1.2.6

func DumpHTTPResponse(rsp *http.Response, loadBody bool, wr ...io.Writer) ([]byte, error)

DumpHTTPResponse dumps http response to bytes if loadBody is true, it will load body to memory

transfer-encoding is a special header

func DumpHostFileWithTextAndFiles

func DumpHostFileWithTextAndFiles(raw string, divider string, files ...string) (string, error)

func EnableDebug added in v1.2.3

func EnableDebug()

func Error

func Error(i interface{}) error

func Errorf

func Errorf(format string, args ...interface{}) error

func EscapeInvalidUTF8Byte

func EscapeInvalidUTF8Byte(s []byte) string

func ExtractFaviconURL added in v1.3.1

func ExtractFaviconURL(siteURL string, content []byte) (string, error)

ExtractFaviconURL will receive a site url and html content return the favicon url Example:

http.ExtractFaviconURL("https://www.baidu.com", []byte(`<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">`))
http.ExtractFaviconURL("https://www.baidu.com", []byte(`<link rel="icon" href="/favicon.ico" type="image/x-icon">`))
http.ExtractFaviconURL("https://www.baidu.com", []byte(`<link rel="icon" href="/favicon.png" type="image/png">`))

func ExtractHost

func ExtractHost(raw string) string

ExtractHost 尝试从字符串中解析出host和port,并返回host Example: ``` str.ExtractHost("127.0.0.1:8888") // 127.0.0.1 str.ExtractHost("https://example.com") // example.com ```

func ExtractHostPort

func ExtractHostPort(raw string) string

ExtractHostPort 尝试从字符串中解析出host和port,并返回host:port Example: ``` str.ExtractHostPort("https://127.0.0.1:8888") // 127.0.0.1:8888 str.ExtractHostPort("https://baidu.com") // 127.0.0.1:443 ```

func ExtractMapValueBool added in v1.2.3

func ExtractMapValueBool(m any, key string) bool

func ExtractMapValueGeneralMap added in v1.2.3

func ExtractMapValueGeneralMap(m any, key string) map[string]any

func ExtractMapValueInt added in v1.2.3

func ExtractMapValueInt(m any, key string) int

func ExtractMapValueRaw added in v1.2.3

func ExtractMapValueRaw(m any, key string) any

func ExtractMapValueString added in v1.2.3

func ExtractMapValueString(m any, key string) string

func ExtractRawPath

func ExtractRawPath(target string) string

func ExtractStrContextByKeyword

func ExtractStrContextByKeyword(raw string, res []string) []string

ExtractStrContext 从字符串raw中提取一组关键字res上下文的内容,上下文的长度是512个字符确定。 Example: ``` str.ExtractStrContext("hello yak", ["hello"]) // ["hello yak"] ```

func ExtractTitleFromHTMLTitle

func ExtractTitleFromHTMLTitle(s string, defaultValue string) string

func FileLineReader

func FileLineReader(file string) (chan []byte, error)

func FixForParseIP

func FixForParseIP(host string) string

func FixHTTPRequestForGolangNativeHTTPClient added in v1.2.6

func FixHTTPRequestForGolangNativeHTTPClient(req *http.Request)

FixHTTPRequestForGolangNativeHTTPClient utils.Read/DumpRequest is working as pair... if u want to use transport(golang native) do this `FixHTTPRequestForGolangNativeHTTPClient` helps because golang native transport will encode chunked body again

func FixHTTPRequestForHTTPDo

func FixHTTPRequestForHTTPDo(r *http.Request) (*http.Request, error)

func FixHTTPRequestForHTTPDoWithHttps

func FixHTTPRequestForHTTPDoWithHttps(r *http.Request, isHttps bool) (*http.Request, error)

func FixHTTPResponseForGolangNativeHTTPClient added in v1.2.6

func FixHTTPResponseForGolangNativeHTTPClient(ins *http.Response)

func FixJsonRawBytes

func FixJsonRawBytes(rawBytes []byte) []byte

func FloatSecondDuration

func FloatSecondDuration(f float64) time.Duration

func FlushWriter added in v1.2.8

func FlushWriter(writer io.Writer)

func Format

func Format(raw string, data map[string]string) string

func GetAllFiles

func GetAllFiles(path string) (fileNames []string, err error)

func GetCClassByIPv4

func GetCClassByIPv4(s string) (network string, err error)

IPv4ToCClassNetwork 尝试从一个 IPv4 地址中获取 C 类网络地址,并返回错误 Example: ``` network, err = str.IPv4ToCClassNetwork("192.168.0.1") // network = "192.168.0.0/24", err = nil ```

func GetCachedLog added in v1.2.2

func GetCachedLog() (res []string)

func GetConnectedToHostPortFromHTTPRequest added in v1.2.6

func GetConnectedToHostPortFromHTTPRequest(t *http.Request) (string, error)

func GetCurrentDate

func GetCurrentDate() (time.Time, error)

func GetCurrentWeekMonday

func GetCurrentWeekMonday() (time.Time, error)

func GetDate

func GetDate(t time.Time) (time.Time, error)

func GetDefaultGMTLSConfig added in v1.2.3

func GetDefaultGMTLSConfig(i float64) *gmtls.Config

func GetDefaultOnlyGMTLSConfig added in v1.3.1

func GetDefaultOnlyGMTLSConfig(i float64) *gmtls.Config

func GetDefaultTLSConfig added in v1.2.3

func GetDefaultTLSConfig(i float64) *tls.Config

func GetExecutableFromEnv added in v1.2.8

func GetExecutableFromEnv(cmd string) (string, error)

func GetFileAbsDir

func GetFileAbsDir(filePath string) (string, error)

func GetFileAbsPath

func GetFileAbsPath(filePath string) (string, error)

func GetFileMd5

func GetFileMd5(filepath string) string

func GetFileModTime

func GetFileModTime(path string) int64

func GetFirstExcludedHighPort

func GetFirstExcludedHighPort(excluded ...string) int

func GetFirstExistedExecutablePath

func GetFirstExistedExecutablePath(paths ...string) string

func GetFirstExistedFile

func GetFirstExistedFile(paths ...string) string

func GetFirstExistedFileE

func GetFirstExistedFileE(paths ...string) (string, error)

func GetFirstExistedPath

func GetFirstExistedPath(paths ...string) string

func GetFirstExistedPathE

func GetFirstExistedPathE(paths ...string) (string, error)

func GetHomeDir

func GetHomeDir() (string, error)

func GetHomeDirDefault

func GetHomeDirDefault(d string) string

func GetLastElement added in v1.2.8

func GetLastElement[T any](list []T) T

func GetLatestFile

func GetLatestFile(dir, suffix string) (filename string, err error)

func GetLocalIPAddress

func GetLocalIPAddress() string

func GetLocalIPAddressViaIface

func GetLocalIPAddressViaIface() string

func GetMachineCode

func GetMachineCode() string

func GetNExcludeExcludeHighPort

func GetNExcludeExcludeHighPort(n int, excluded ...string) []int

func GetRandomAvailableTCPPort

func GetRandomAvailableTCPPort() int

func GetRandomAvailableUDPPort

func GetRandomAvailableUDPPort() int

func GetRandomIPAddress

func GetRandomIPAddress() string

func GetRandomLocalAddr

func GetRandomLocalAddr() string

func GetRangeAvailableTCPPort added in v1.3.0

func GetRangeAvailableTCPPort(startPort, endPort, maxRetries int) (int, error)

func GetSameSubStrings

func GetSameSubStrings(raw ...string) []string

func GetSameSubStringsRunes

func GetSameSubStringsRunes(text1, text2 []rune) [][]rune

func GetSortedMapKeys added in v1.3.1

func GetSortedMapKeys[K Ordered, V any](m map[K]V) []K

func GetSystemDnsServers added in v1.2.3

func GetSystemDnsServers() ([]string, error)

func GetSystemMachineCode

func GetSystemMachineCode() (_ string, err error)

func GetSystemNameServerList

func GetSystemNameServerList() ([]string, error)

func GetUnexportedField

func GetUnexportedField(field reflect.Value) interface{}

func GetWeekStartMonday

func GetWeekStartMonday(t time.Time) (time.Time, error)

func GetWeekStartSunday

func GetWeekStartSunday() (time.Time, error)

func GormTransaction added in v1.3.0

func GormTransaction(db *gorm.DB, callback func(tx *gorm.DB) error) (err error)

func GzipCompress

func GzipCompress(i interface{}) ([]byte, error)

func GzipDeCompress

func GzipDeCompress(ret []byte) ([]byte, error)

func HTTPPacketIsLargerThanMaxContentLength

func HTTPPacketIsLargerThanMaxContentLength(res interface{}, maxLength int) bool

func HandleStdout

func HandleStdout(ctx context.Context, handle func(string)) error

func HostContains added in v1.3.0

func HostContains(rule string, target string) bool

func HostPort

func HostPort(host string, port interface{}) string

HostPort 将 host 和 port 拼接成 host:port 的形式 Example: ``` str.HostPort("yaklang.com", 443) // yaklang.com:443 ```

func HttpDumpWithBody

func HttpDumpWithBody(i interface{}, body bool) ([]byte, error)

func HttpGet

func HttpGet(url string) ([]byte, error)

func HttpGetWithRetry

func HttpGetWithRetry(retry int, url string) ([]byte, error)

func HttpShow

func HttpShow(i interface{}) []byte

func IContains

func IContains(s, sub string) bool

func IHasPrefix added in v1.2.8

func IHasPrefix(s, sub string) bool

func IPv4ToCClassNetwork

func IPv4ToCClassNetwork(s string) (string, error)

func IPv4ToUint32

func IPv4ToUint32(ip net.IP) (uint32, error)

func IPv4ToUint64

func IPv4ToUint64(ip string) (int64, error)

func IStringContainsAnyOfSubString

func IStringContainsAnyOfSubString(s string, subs []string) bool

func InDebugMode

func InDebugMode() bool

func InGithubActions added in v1.3.1

func InGithubActions() bool

func InTestcase added in v1.3.1

func InTestcase() bool

func IncludeExcludeChecker added in v1.3.2

func IncludeExcludeChecker(includes, excludes []string, target string) (passed bool)

func InetAtoN

func InetAtoN(ip net.IP) int64

func InetNtoA

func InetNtoA(ip int64) net.IP

func InitialCapitalizationEachWords

func InitialCapitalizationEachWords(str string) string

每个单词首字母大写

func InsertSliceItem added in v1.2.8

func InsertSliceItem[T comparable](slices []T, e T, index int) []T

func Int64SliceToIntSlice

func Int64SliceToIntSlice(i []int64) []int

func IntArrayContains

func IntArrayContains(array []int, element int) bool

func IntLargerZeroOr

func IntLargerZeroOr(s ...int) int

func IntSliceToInt64Slice

func IntSliceToInt64Slice(i []int) []int64

func InterfaceToBoolean added in v1.2.4

func InterfaceToBoolean(i any) bool

func InterfaceToBytes

func InterfaceToBytes(i interface{}) (result []byte)

func InterfaceToBytesSlice

func InterfaceToBytesSlice(i interface{}) [][]byte

func InterfaceToGeneralMap

func InterfaceToGeneralMap(params interface{}) (finalResult map[string]interface{})

func InterfaceToInt added in v1.2.4

func InterfaceToInt(i any) int

func InterfaceToMap

func InterfaceToMap(i interface{}) map[string][]string

func InterfaceToMapInterface

func InterfaceToMapInterface(i interface{}) map[string]interface{}

func InterfaceToMapInterfaceE

func InterfaceToMapInterfaceE(i interface{}) (map[string]interface{}, error)

func InterfaceToQuotedString

func InterfaceToQuotedString(i interface{}) string

func InterfaceToSliceInterface added in v1.2.2

func InterfaceToSliceInterface(i interface{}) []any

func InterfaceToSliceInterfaceE added in v1.2.2

func InterfaceToSliceInterfaceE(i interface{}) ([]any, error)

func InterfaceToString

func InterfaceToString(i interface{}) string

func InterfaceToStringSlice

func InterfaceToStringSlice(i interface{}) (result []string)

ToStringSlice 将任意类型的数据转换为字符串切片 Example: ``` str.ToStringSlice("hello") // ["hello"] str.ToStringSlice([1, 2]) // ["1", "2"] ```

func IsASCIIPrint

func IsASCIIPrint(s string) bool

isASCIIPrint returns whether s is ASCII and printable according to https://tools.ietf.org/html/rfc20#section-4.2.

func IsBase64 added in v1.2.9

func IsBase64(s string) bool

func IsCommonHTTPRequestMethod added in v1.2.7

func IsCommonHTTPRequestMethod(i any) bool

func IsDir

func IsDir(path string) bool

func IsErrorNetOpTimeout added in v1.2.8

func IsErrorNetOpTimeout(err error) bool

func IsFile

func IsFile(path string) bool

func IsFloat added in v1.3.2

func IsFloat(v interface{}) bool

func IsGzip

func IsGzip(raw []byte) bool

func IsGzipBytes

func IsGzipBytes(i interface{}) bool

func IsHttpOrHttpsUrl added in v1.2.4

func IsHttpOrHttpsUrl(raw string) bool

func IsIPv4

func IsIPv4(raw string) bool

IsIPv4 判断字符串是否是 IPv4 地址 Example: ``` str.IsIPv4("::1") // false str.IsIPv4("127.0.0.1") // true ```

func IsIPv6

func IsIPv6(raw string) bool

IsIPv6 判断字符串是否是 IPv6 地址 Example: ``` str.IsIPv6("::1") // true str.IsIPv6("127.0.0.1") // false ```

func IsImage

func IsImage(i []byte) bool

func IsInt added in v1.3.2

func IsInt(v interface{}) bool

func IsJSON

func IsJSON(raw string) (string, bool)

func IsLinux added in v1.2.3

func IsLinux() bool

func IsLoopback

func IsLoopback(t string) bool

func IsMac added in v1.2.3

func IsMac() bool

func IsNil added in v1.2.8

func IsNil(input any) bool

func IsPortAvailable

func IsPortAvailable(host string, p int) bool

func IsPortAvailableWithUDP

func IsPortAvailableWithUDP(host string, p int) bool

func IsPrivateIP

func IsPrivateIP(ip net.IP) bool

func IsProtobuf

func IsProtobuf(raw []byte) bool

func IsStrongPassword

func IsStrongPassword(s string) bool

IsStrongPassword 判断字符串是否为强密码,强密码的定义为:长度大于8,同时包含特殊字符、小写字母、大写字母、数字 Example: ``` str.IsStrongPassword("12345678") // false str.IsStrongPassword("12345678a") // false str.IsStrongPassword("12345678aA") // false str.IsStrongPassword("12345678aA!") // true ```

func IsSubPath added in v1.3.1

func IsSubPath(sub, parent string) bool

func IsTCPPortAvailable

func IsTCPPortAvailable(p int) bool

func IsTCPPortAvailableWithLoopback

func IsTCPPortAvailableWithLoopback(p int) bool

func IsTCPPortOpen

func IsTCPPortOpen(host string, p int) bool

func IsUDPPortAvailable

func IsUDPPortAvailable(p int) bool

func IsUDPPortAvailableWithLoopback

func IsUDPPortAvailableWithLoopback(p int) bool

func IsValidBool added in v1.3.1

func IsValidBool(raw string) bool

func IsValidCIDR

func IsValidCIDR(raw string) bool

func IsValidDomain

func IsValidDomain(raw string) bool

func IsValidFloat

func IsValidFloat(raw string) bool

func IsValidHost added in v1.3.0

func IsValidHost(raw string) bool

func IsValidHostsRange

func IsValidHostsRange(raw string) bool

func IsValidInteger

func IsValidInteger(raw string) bool

func IsValidPortsRange

func IsValidPortsRange(ports string) bool

func IsWebsocketUrl added in v1.3.0

func IsWebsocketUrl(raw string) bool

func IsWindows added in v1.2.3

func IsWindows() bool

func JavaTimeFormatter

func JavaTimeFormatter(t time.Time, formatter string) string

func JitterBackoff added in v1.3.2

func JitterBackoff(min, max time.Duration, attempt int) time.Duration

Return capped exponential backoff with jitter http://www.awsarchitectureblog.com/2015/03/backoff.html

func JoinErrors added in v1.2.8

func JoinErrors(errs ...error) error

func Jsonify

func Jsonify(i interface{}) []byte

func LastLine

func LastLine(s []byte) []byte

func LoopEvery1sBreakUntil

func LoopEvery1sBreakUntil(until func() bool)

func MapGetBool

func MapGetBool(m map[string]interface{}, key string) bool

func MapGetBoolOr

func MapGetBoolOr(m map[string]interface{}, key string, value bool) bool

func MapGetFirstRaw

func MapGetFirstRaw(m map[string]interface{}, key ...string) interface{}

func MapGetFloat32

func MapGetFloat32(m map[string]interface{}, key string) float32

func MapGetFloat32Or

func MapGetFloat32Or(m map[string]interface{}, key string, value float32) float32

func MapGetFloat64

func MapGetFloat64(m map[string]interface{}, key string) float64

func MapGetFloat64Or

func MapGetFloat64Or(m map[string]interface{}, key string, value float64) float64

func MapGetInt

func MapGetInt(m map[string]interface{}, key string) int

func MapGetInt64

func MapGetInt64(m map[string]interface{}, key string) int64

func MapGetInt64Or

func MapGetInt64Or(m map[string]interface{}, key string, value int64) int64

func MapGetIntEx added in v1.2.2

func MapGetIntEx(m map[string]interface{}, key ...string) int

func MapGetIntOr

func MapGetIntOr(m map[string]interface{}, key string, value int) int

func MapGetMapRaw

func MapGetMapRaw(m map[string]interface{}, key string) map[string]interface{}

func MapGetMapRawOr

func MapGetMapRawOr(m map[string]interface{}, key string, value map[string]interface{}) map[string]interface{}

func MapGetRaw

func MapGetRaw(m map[string]interface{}, key string) interface{}

func MapGetRawOr

func MapGetRawOr(m map[string]interface{}, key string, value interface{}) interface{}

func MapGetString

func MapGetString(m map[string]interface{}, key string) string

func MapGetString2

func MapGetString2(m map[string]string, key string) string

func MapGetStringByManyFields added in v1.2.4

func MapGetStringByManyFields(m map[string]interface{}, key ...string) string

func MapGetStringOr

func MapGetStringOr(m map[string]interface{}, key string, value string) string

func MapGetStringOr2

func MapGetStringOr2(m map[string]string, key string, value string) string

func MapGetStringSlice added in v1.2.7

func MapGetStringSlice(m map[string]interface{}, key string) []string

func MapQueryToString

func MapQueryToString(values map[string][]string) string

map[string][]string to query

func MapStringGet

func MapStringGet(m map[string]string, key string) string

func MapStringGetOr

func MapStringGetOr(m map[string]string, key string, value string) string

func MapToStruct added in v1.2.6

func MapToStruct(input map[string]interface{}, output interface{}) error

func MarshalHTTPRequest

func MarshalHTTPRequest(req *http.Request) ([]byte, error)

func MarshalIdempotent added in v1.3.0

func MarshalIdempotent(v interface{}) ([]byte, error)

func MatchAllOfGlob

func MatchAllOfGlob(
	i interface{}, re ...string) bool

MatchAllOfGlob 尝试将 i 转换为字符串,然后使用 glob 匹配模式匹配,如果所有的glob模式都匹配成功,则返回 true,否则返回 false Example: ``` str.MatchAllOfGlob("abc", "a*", "?b?", "[a-z]?c") // true ```

func MatchAllOfRegexp

func MatchAllOfRegexp(
	i interface{},
	re ...string) bool

MatchAllOfRegexp 尝试将 i 转换为字符串,然后使用正则表达式匹配,如果所有的正则表达式都匹配成功,则返回 true,否则返回 false Example: ``` str.MatchAllOfRegexp("abc", "a.+", ".?b.?", "\\w{2}c") // true ```

func MatchAllOfSubString

func MatchAllOfSubString(i interface{}, subStr ...string) bool

MatchAllOfSubString 尝试将 i 转换为字符串,然后判断所有子串 subStr 是否都存在于 i 中,如果都存在则返回 true,否则返回 false,此函数忽略大小写 Example: ``` str.MatchAllOfSubString("abc", "a", "b", "c") // true ```

func MatchAnyOfGlob

func MatchAnyOfGlob(
	i interface{}, re ...string) bool

MatchAnyOfGlob 尝试将 i 转换为字符串,然后使用 glob 匹配模式匹配,如果任意一个glob模式匹配成功,则返回 true,否则返回 false Example: ``` str.MatchAnyOfGlob("abc", "a*", "??b", "[^a-z]?c") // true ```

func MatchAnyOfRegexp

func MatchAnyOfRegexp(
	i interface{},
	re ...string) bool

MatchAnyOfRegexp 尝试将 i 转换为字符串,然后使用正则表达式匹配,如果任意一个正则表达式匹配成功,则返回 true,否则返回 false Example: ``` str.MatchAnyOfRegexp("abc", "a.+", "Ab.?", ".?bC") // true ```

func MatchAnyOfSubString

func MatchAnyOfSubString(i interface{}, subStr ...string) bool

MatchAnyOfSubString 尝试将 i 转换为字符串,然后判断是否有任意子串 subStr 存在于 i 中,如果有其中一个子串存在于 i 中则返回 true,否则返回 false,此函数忽略大小写 Example: ``` str.MatchAnyOfSubString("abc", "a", "z", "x") // true ```

func Max

func Max(x, y int) int

func MaxByte

func MaxByte(x, y byte) byte

func MaxInt64

func MaxInt64(x, y int64) int64

func MergeGeneralMap added in v1.2.2

func MergeGeneralMap(ms ...map[string]any) map[string]any

func MergeStringMap

func MergeStringMap(ms ...map[string]string) map[string]string

func Min

func Min(x, y int) int

func MinByte

func MinByte(x, y byte) byte

func MinInt64

func MinInt64(x, y int64) int64

func Mmh3Hash32

func Mmh3Hash32(raw []byte) string

func MustUnmarshalJson added in v1.2.4

func MustUnmarshalJson[T any](raw []byte) *T

func NetworkByteOrderBytesToUint16 added in v1.2.4

func NetworkByteOrderBytesToUint16(r []byte) uint16

func NetworkByteOrderUint16ToBytes added in v1.2.3

func NetworkByteOrderUint16ToBytes(i any) []byte

func NetworkByteOrderUint32ToBytes added in v1.2.3

func NetworkByteOrderUint32ToBytes(i any) []byte

func NetworkByteOrderUint64ToBytes added in v1.2.3

func NetworkByteOrderUint64ToBytes(i any) []byte

func NetworkByteOrderUint8ToBytes added in v1.2.3

func NetworkByteOrderUint8ToBytes(i any) []byte

func NewBlockParser

func NewBlockParser(reader io.Reader) *blockParser

func NewBufPipe added in v1.2.8

func NewBufPipe(buf []byte) (*PipeReader, *PipeWriter)

NewBufPipe creates a synchronous pipe using buf as its initial contents. It can be used to connect code expecting an io.Reader with code expecting an io.Writer.

Unlike io.Pipe, writes never block because the internal buffer has variable size. Reads block only when the buffer is empty.

It is safe to call Read and Write in parallel with each other or with Close. Parallel calls to Read and parallel calls to Write are also safe: the individual calls will be gated sequentially.

The new pipe takes ownership of buf, and the caller should not use buf after this call. New is intended to prepare a PipeReader to read existing data. It can also be used to set the initial size of the internal buffer for writing. To do that, buf should have the desired capacity but a length of zero.

func NewDebounce added in v1.2.8

func NewDebounce(wait float64) func(f func())

func NewDefaultGMTLSConfig

func NewDefaultGMTLSConfig() *gmtls.Config

func NewDefaultHTTPClient

func NewDefaultHTTPClient() *http.Client

func NewDefaultHTTPClientWithProxy

func NewDefaultHTTPClientWithProxy(proxy string) *http.Client

func NewDefaultTLSClient

func NewDefaultTLSClient(conn net.Conn) *tls.Conn

func NewDefaultTLSConfig

func NewDefaultTLSConfig() *tls.Config

func NewDialer added in v1.2.4

func NewDialer()

func NewFileLineWriter added in v1.3.0

func NewFileLineWriter(file string, flag int, perm fs.FileMode) (*fileLineWriter, error)

func NewNetConnFromReadWriter

func NewNetConnFromReadWriter()

func NewSignalChannel

func NewSignalChannel(targetSignal ...os.Signal) chan os.Signal

func NewThrottle added in v1.2.8

func NewThrottle(wait float64) func(f func())

func OpenTempFile added in v1.2.8

func OpenTempFile(s string) (*os.File, error)

func ParseCStyleBinaryRawToBytes

func ParseCStyleBinaryRawToBytes(raw []byte) []byte

func ParseHTTPRequestLine added in v1.2.6

func ParseHTTPRequestLine(line string) (method, requestURI, proto string, ok bool)

ParseHTTPRequestLine parses "GET /foo HTTP/1.1" into its three parts.

func ParseHTTPResponseLine added in v1.2.6

func ParseHTTPResponseLine(line string) (string, int, string, bool)

ParseHTTPResponseLine parses `HTTP/1.1 200 OK` into its ports

func ParseHostToAddrString

func ParseHostToAddrString(host string) string

func ParseIPNetToRange

func ParseIPNetToRange(n *net.IPNet) (int64, int64, error)

func ParseJavaOverLongString added in v1.3.2

func ParseJavaOverLongString(raw []byte) ([]byte, error)

func ParseLines

func ParseLines(raw string) chan string

func ParsePortToProtoPort added in v1.2.6

func ParsePortToProtoPort(port int) (string, int)

func ParseStringToGeneralMap added in v1.2.3

func ParseStringToGeneralMap(i any) map[string]any

func ParseStringToHostPort

func ParseStringToHostPort(raw string) (host string, port int, err error)

ParseStringToHostPort 尝试从字符串中解析出host和port,并与错误一起返回 Example: ``` host, port, err = str.ParseStringToHostPort("127.0.0.1:8888") // host = "127.0.0.1", port = 8888, err = nil host, port, err = str.ParseStringToHostPort("https://example.com") // host = "example.com", port = 443, err = nil host, port, err = str.ParseStringToHostPort("Hello Yak") // host = "", port = 0, err = error("unknown port for [Hello Yak]") ```

func ParseStringToHosts

func ParseStringToHosts(raw string) []string

ParseStringToHosts 将字符串解析成 Host 列表, Host 可以以逗号分隔,并且会解析 CIDR 网段 Example: ``` str.ParseStringToHosts("192.168.0.1/32,127.0.0.1") // ["192.168.0.1", "127.0.0.1"] ```

func ParseStringToHttpsAndHostname added in v1.2.9

func ParseStringToHttpsAndHostname(res string) (bool, string)

func ParseStringToLines

func ParseStringToLines(raw string) []string

ParseStringToLines 将字符串按换行符(\n)分割成字符串数组,并去除BOM头和空行 Example: ``` str.ParseStringToLines("Hello World\nHello Yak") // ["Hello World", "Hello Yak"] ```

func ParseStringToPorts

func ParseStringToPorts(ports string) []int

ParseStringToPorts 将字符串解析成 Port 列表, Port 可以以逗号分隔,并且会解析-分隔的范围 Example: ``` str.ParseStringToPorts("10086-10088,23333") // [10086, 10087, 10088, 23333] ```

func ParseStringToRawLines

func ParseStringToRawLines(raw string) []string

func ParseStringToUrl added in v1.2.6

func ParseStringToUrl(s string) *url.URL

func ParseStringToUrlParams

func ParseStringToUrlParams(i interface{}) string

func ParseStringToUrls

func ParseStringToUrls(targets ...string) []string

ParseStringToUrls 尝试从给定的字符串(ip,域名)中解析出 URL 列表,补全协议和端口 Example: ``` str.ParseStringToUrls("yaklang.com:443", "https://yaklang.io") // [https://yaklang.com, https://yaklang.io] ```

func ParseStringToUrlsWith3W

func ParseStringToUrlsWith3W(sub ...string) []string

ParseStringToUrlsWith3W 尝试从给定的字符串(ip,域名)中解析出 URL 列表,补全协议和端口,还会补全域名前的 www 前缀 Example: ``` str.ParseStringToUrlsWith3W("yaklang.com:443", "https://yaklang.io") // [https://yaklang.com, https://www.yaklang.com, https://yaklang.io, https://www.yaklang.io] ```

func ParseStringToVisible

func ParseStringToVisible(raw interface{}) string

func ParseStringUrlToUrlInstance

func ParseStringUrlToUrlInstance(s string) (*url.URL, error)

ParseStringUrlToUrlInstance 将字符串 url 解析为 URL 结构体并返回错误 Example: ``` str.ParseStringUrlToUrlInstance("https://yaklang.com/abc?a=1") ```

func ParseStringUrlToWebsiteRootPath

func ParseStringUrlToWebsiteRootPath(url string) (newURL string)

ParseStringUrlToWebsiteRootPath 将字符串 url 解析为其根路径的URL Example: ``` str.ParseStringUrlToWebsiteRootPath("https://yaklang.com/abc?a=1") // https://yaklang.com/ ```

func PathExists

func PathExists(path string) (bool, error)

func PrettifyJoin added in v1.2.9

func PrettifyJoin(sep string, s ...string) string

func PrettifyListFromStringSplitEx

func PrettifyListFromStringSplitEx(Raw string, sep ...string) (targets []string)

PrettifyListFromStringSplitEx split string using given sep if no sep given sep = []string{",", "|"}

func PrettifyListFromStringSplited

func PrettifyListFromStringSplited(Raw string, sep string) (targets []string)

SplitAndTrim 将字符串s按照sep分割成字符串切片,并且去除每个字符串的前后空白字符 Example: ``` str.SplitAndTrim(" hello yak ", " ") // ["hello", "yak"] ```

func PrettifyShrinkJoin added in v1.2.9

func PrettifyShrinkJoin(sep string, s ...string) string

func PrintCurrentGoroutineRuntimeStack

func PrintCurrentGoroutineRuntimeStack()

func ProtoHostPort added in v1.2.6

func ProtoHostPort(proto string, host string, port int) string

func RandChoice added in v1.3.1

func RandChoice(a ...string) string

func RandNumberStringBytes

func RandNumberStringBytes(n int) string

func RandSample

func RandSample(n int, material ...string) string

func RandSampleInRange added in v1.3.0

func RandSampleInRange(minLen, maxLen int, material ...string) string

func RandSecret

func RandSecret(n int) string

RandSecret 返回在所有可见ascii字符表中随机挑选 n 个字符组成的密码字符串,这个密码经过str.IsStrongPassword验证,即为强密码 Example: ``` str.RandSecret(10) ```

func RandStringBytes

func RandStringBytes(n int) string

RandStringBytes 返回在大小写字母表中随机挑选 n 个字符组成的字符串 Example: ``` str.RandStr(10) ```

func ReadConnUntil added in v1.2.8

func ReadConnUntil(conn net.Conn, timeout time.Duration, sep ...byte) ([]byte, error)

func ReadConnWithTimeout

func ReadConnWithTimeout(r net.Conn, timeout time.Duration) ([]byte, error)

func ReadDirsRecursivelyCallback added in v1.2.9

func ReadDirsRecursivelyCallback(p string, i func(info *FileInfo) bool) error

func ReadHTTPRequestFromBufioReader added in v1.2.6

func ReadHTTPRequestFromBufioReader(reader *bufio.Reader) (*http.Request, error)

func ReadHTTPRequestFromBufioReaderOnFirstLine added in v1.2.8

func ReadHTTPRequestFromBufioReaderOnFirstLine(reader *bufio.Reader, h func(string)) (*http.Request, error)

func ReadHTTPRequestFromBytes added in v1.2.6

func ReadHTTPRequestFromBytes(raw []byte) (*http.Request, error)

func ReadHTTPResponseFromBufioReader added in v1.2.6

func ReadHTTPResponseFromBufioReader(reader io.Reader, req *http.Request) (*http.Response, error)

func ReadHTTPResponseFromBufioReaderConn added in v1.2.8

func ReadHTTPResponseFromBufioReaderConn(reader io.Reader, conn net.Conn, req *http.Request) (*http.Response, error)

func ReadHTTPResponseFromBytes added in v1.2.6

func ReadHTTPResponseFromBytes(raw []byte, req *http.Request) (*http.Response, error)

func ReadLine added in v1.2.8

func ReadLine(reader io.Reader) ([]byte, error)

func ReadLineEx

func ReadLineEx(reader io.Reader) (string, int64, error)

func ReadN

func ReadN(reader io.Reader, n int) ([]byte, error)

func ReadUntilStable added in v1.2.8

func ReadUntilStable(reader io.Reader, conn net.Conn, timeout time.Duration, stableTimeout time.Duration, sep ...byte) ([]byte, error)

ReadUntilStable is a stable reader check interval(stableTimeout) safe for conn is empty

func ReadUntilStableEx added in v1.2.8

func ReadUntilStableEx(reader io.Reader, noTimeout bool, conn net.Conn, timeout time.Duration, stableTimeout time.Duration, sep ...byte) ([]byte, error)

ReadUntilStableEx allow skip timeout, read until stop word or timeout

func ReadWithContextTickCallback

func ReadWithContextTickCallback(ctx context.Context, rc io.Reader, callback func([]byte) bool, interval time.Duration)

func ReadWithLen

func ReadWithLen(r io.Reader, length int) ([]byte, int)

func RegisterDefaultTLSConfigGenerator added in v1.2.3

func RegisterDefaultTLSConfigGenerator(h func() (*tls.Config, *gmtls.Config, *gmtls.Config, *tls.Config, *gmtls.Config, []byte, []byte))

func RegisterTempFileOpener added in v1.2.8

func RegisterTempFileOpener(dialer FileOpenerType)

func RemoveBOM

func RemoveBOM(raw []byte) []byte

func RemoveBOMForString

func RemoveBOMForString(raw string) string

func RemoveRepeatStringSlice

func RemoveRepeatStringSlice(slc []string) []string

RemoveRepeat 移除字符串切片slc中的重复元素 Example: ``` str.RemoveRepeat(["hello", "yak", "hello"]) // ["hello", "yak"] ```

func RemoveRepeatStringSliceByLoop

func RemoveRepeatStringSliceByLoop(slc []string) []string

func RemoveRepeatStringSliceByMap

func RemoveRepeatStringSliceByMap(slc []string) []string

func RemoveRepeatUintSlice

func RemoveRepeatUintSlice(slc []uint) []uint

元素去重

func RemoveRepeatUintSliceByLoop

func RemoveRepeatUintSliceByLoop(slc []uint) []uint

func RemoveRepeatUintSliceByMap

func RemoveRepeatUintSliceByMap(slc []uint) []uint

func RemoveRepeatedWithStringSlice

func RemoveRepeatedWithStringSlice(slice []string) []string

func RemoveSliceItem added in v1.2.8

func RemoveSliceItem[T comparable](slice []T, s T) []T

func RemoveUnprintableChars

func RemoveUnprintableChars(raw string) string

func RemoveUnprintableCharsWithReplace

func RemoveUnprintableCharsWithReplace(raw string, handle func(i byte) string) string

func RemoveUnprintableCharsWithReplaceItem

func RemoveUnprintableCharsWithReplaceItem(raw string) string

func ReplaceLastSubString added in v1.3.2

func ReplaceLastSubString(s, sub, new string) string

func ReplaceSliceItem added in v1.2.8

func ReplaceSliceItem[T comparable](s []T, t T, to T) []T

func Retry added in v1.2.7

func Retry(times int, f func() error) error

func RetryWithExpBackOff added in v1.2.7

func RetryWithExpBackOff(f func() error) error

func RetryWithExpBackOffEx added in v1.2.7

func RetryWithExpBackOffEx(times int, begin int, f func() error) error

func SSDeepHash

func SSDeepHash(raw []byte) string

CalcSSDeep 计算并返回一段文本的模糊哈希值 Example: ``` str.CalcSSDeep("hello") ```

func SafeReflectStructField added in v1.2.9

func SafeReflectStructField(refV reflect.Value, field reflect.Value) reflect.Value

func SafeReflectValue added in v1.2.9

func SafeReflectValue(refV reflect.Value) reflect.Value

func SaveFile

func SaveFile(raw interface{}, filePath string) error

func SaveTempFile added in v1.3.0

func SaveTempFile(content interface{}, pattern string) (string, error)

func SetCurrentAbsPath added in v1.2.8

func SetCurrentAbsPath(path ...string)

SetCurrentAbsPath set absolute path as current project path, ff you pass a string parameter, use this string as the absolute path of the project

func SetSkipBottomFrameNum added in v1.2.8

func SetSkipBottomFrameNum(skip int)

SetSkipBottomFrameNum set the number of frames to skip from bottom, default is 2

func SetSkipFrameNum added in v1.2.8

func SetSkipFrameNum(skip int)

SetSkipFrameNum set the number of frames to skip, default is 3

func SetUnexportedField

func SetUnexportedField(field reflect.Value, value interface{})

func ShouldRemoveZeroContentLengthHeader added in v1.2.6

func ShouldRemoveZeroContentLengthHeader(s string) bool

func ShuffleInt

func ShuffleInt(slice []int)

func ShuffleString

func ShuffleString(slice []string)

func SimHash

func SimHash(raw []byte) uint64

CalcSimHash 计算并返回一段文本的 SimHash 值 Example: ``` str.CalcSimHash("hello") ```

func SimilarStr

func SimilarStr(str1 []rune, str2 []rune) (int, int, int)

return the len of longest string both in str1 and str2 and the positions in str1 and str2

func SliceGroup

func SliceGroup(origin []string, groupSize int) [][]string

func SnakeString

func SnakeString(s string) string

func SocketTypeUint32ToString

func SocketTypeUint32ToString(i uint32) string

func Spinlock added in v1.2.3

func Spinlock(t float64, h func() bool) error

func SplitHostsToPrivateAndPublic

func SplitHostsToPrivateAndPublic(hosts ...string) (privs, pub []string)

SplitHostsToPrivateAndPublic 将 hosts 按照私有 IP 和公有 IP 分开 Example: ``` str.SplitHostsToPrivateAndPublic("127.0.0.1", "8.8.8.8", "10.0.0.1") // ["127.0.0.1", "10.0.0.1"], ["8.8.8.8"] ```

func StableReader

func StableReader(conn io.Reader, timeout time.Duration, maxSize int) []byte

func StableReaderEx

func StableReaderEx(conn net.Conn, timeout time.Duration, maxSize int) []byte

func StarAsWildcardToRegexp

func StarAsWildcardToRegexp(prefix string, target string) (*regexp.Regexp, error)

func StartCacheLog added in v1.2.2

func StartCacheLog(ctx context.Context, n int)

func StringAfter

func StringAfter(value string, a string) string

func StringArrayContains

func StringArrayContains(array []string, element string) bool

func StringArrayFilterEmpty

func StringArrayFilterEmpty(array []string) []string

func StringArrayIndex

func StringArrayIndex(array []string, element string) int

func StringArrayMerge

func StringArrayMerge(t ...[]string) []string

func StringAsFileParams

func StringAsFileParams(target interface{}) []byte

func StringBefore

func StringBefore(value string, a string) string

func StringContainsAllOfSubString

func StringContainsAllOfSubString(s string, subs []string) bool

func StringContainsAnyOfSubString

func StringContainsAnyOfSubString(s string, subs []string) bool

StringContainsAnyOfSubString 判断字符串s中是否包含subs中的任意一个子串 Example: ``` str.StringContainsAnyOfSubString("hello yak", ["yak", "world"]) // true ```

func StringGlobArrayContains

func StringGlobArrayContains(array []string, element string, seps ...rune) bool

func StringGlobContains added in v1.3.1

func StringGlobContains(pattern string, element string, seps ...rune) bool

func StringHasPrefix

func StringHasPrefix(s string, prefix []string) bool

func StringLowerAndTrimSpace

func StringLowerAndTrimSpace(raw string) string

LowerAndTrimSpace 将字符串raw转换为小写并去除前后空白字符 Example: ``` str.LowerAndTrimSpace(" Hello ") // "hello" ```

func StringOr

func StringOr(s ...string) string

func StringReverse

func StringReverse(s string) string

Reverse the string

func StringSliceContain

func StringSliceContain(s interface{}, raw string) (result bool)

StringSliceContains 判断字符串切片s中是否包含raw,对于非字符串的切片,会尝试将其元素转换为字符串再判断是否包含 Example: ``` str.StringSliceContains(["hello", "yak"], "yak") // true str.StringSliceContains([1, 2, 3], "4") // false ```

func StringSliceContainsAll

func StringSliceContainsAll(s []string, elements ...string) bool

StringSliceContainsAll 判断字符串切片s中是否完全包含elements中的所有元素,对于非字符串的切片,会尝试将其元素转换为字符串再判断是否包含 Example: ``` str.StringSliceContainsAll(["hello", "yak"], "hello", "yak") // true str.StringSliceContainsAll(["hello", "yak"], "hello", "yak", "world") // false ```

func StringSplitAndStrip

func StringSplitAndStrip(raw string, sep string) []string

func StringSubStringArrayContains added in v1.2.3

func StringSubStringArrayContains(array []string, element string) bool

func StringToAsciiBytes

func StringToAsciiBytes(s string) []byte

func Tick1sWithTimeout

func Tick1sWithTimeout(timeout time.Duration, falseToBreak func() bool) (exitedByCondition bool)

func TickEvery1s

func TickEvery1s(falseToBreak func() bool)

func TickWithTimeout

func TickWithTimeout(timeout, interval time.Duration, falseToBreak func() bool) (exitedByCondition bool)

func TickWithTimeoutContext

func TickWithTimeoutContext(ctx context.Context, timeout, interval time.Duration, falseToBreak func() bool) (exitedByCondition bool)

func TimeoutContext

func TimeoutContext(d time.Duration) context.Context

func TimeoutContextSeconds

func TimeoutContextSeconds(d float64) context.Context

func TimestampMs

func TimestampMs() int64

func TimestampNano

func TimestampNano() int64

func TimestampSecond

func TimestampSecond() int64

func ToBytes

func ToBytes(s string) (uint64, error)

ToBytes parses a string formatted by ByteSize as bytes. Note binary-prefixed and SI prefixed units both mean a base-2 units KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G PB = P = PiB = 1024 * T EB = E = EiB = 1024 * P

func ToJavaOverLongString added in v1.3.2

func ToJavaOverLongString(str []byte, l int) []byte

ToJavaOverLongString convert string

func ToLowerAndStrip

func ToLowerAndStrip(s string) string

func ToMapParams

func ToMapParams(params any) (map[string]any, error)

func ToMegabytes

func ToMegabytes(s string) (uint64, error)

ToMegabytes parses a string formatted by ByteSize as megabytes.

func ToNsServer

func ToNsServer(server string) string

func TrimFileNameExt

func TrimFileNameExt(raw string) string

func TryCloseChannel added in v1.2.2

func TryCloseChannel(i any)

func TryWriteChannel added in v1.2.9

func TryWriteChannel[T any](c chan T, data T) (ret bool)

func Uint32ToIPv4

func Uint32ToIPv4(ip uint32) net.IP

func UnsafeBytesToString added in v1.2.6

func UnsafeBytesToString(b []byte) string

func UnsafeStringToBytes added in v1.2.6

func UnsafeStringToBytes(s string) []byte

func UrlJoin

func UrlJoin(origin string, paths ...string) (newURL string, err error)

UrlJoin 将 字符串 origin 和 字符串数组 paths 拼接成一个新的 URL 字符串,并返回错误 Example: ``` newURL, err = str.UrlJoin("https://yaklang.com", "asd", "qwe") // newURL = "https://yaklang.com/asd/qwe", err = nil newURL, err = str.UrlJoin("https://yaklang.com/zxc", "/asd", "qwe") // newURL = "https://yaklang.com/asd/qwe", err = nil ```

func UrlJoinParams

func UrlJoinParams(i string, params ...interface{}) string

func VersionClean added in v1.2.3

func VersionClean(v string) string

func VersionCompare

func VersionCompare(v1, v2 string) (int, error)

VersionCompare 泛用形的版本比较,传入(p1,p2 string), p1>p2返回1,nil, p1<p2返回-1,nil, p1==p2返回0,nil, 比较失败返回 -2,err

func VersionEqual

func VersionEqual(v1, v2 string) bool

VersionEqual 使用版本比较算法比较版本 v1 与版本 v2,如果 v1 等于 v2 返回 true,否则返回 false Example: ``` str.VersionEqual("3.0", "3.0") // true str.VersionEqual("3.0", "3.0a") // false ```

func VersionGreater

func VersionGreater(v1, v2 string) bool

VersionGreater 使用版本比较算法比较版本 v1 与版本 v2,如果 v1 大于 v2 返回 true,否则返回 false Example: ``` str.VersionGreater("1.0.0", "0.9.9") // true str.VersionGreater("3.0", "2.8.8alpha") // true ```

func VersionGreaterEqual

func VersionGreaterEqual(v1, v2 string) bool

VersionGreaterEqual 使用版本比较算法比较版本 v1 与版本 v2,如果 v1 大于等于 v2 返回 true,否则返回 false Example: ``` str.VersionGreaterEqual("1.0.0", "0.9.9") // true str.VersionGreaterEqual("3.0", "3.0") // true str.VersionGreaterEqual("3.0", "3.0a") // false ```

func VersionLess

func VersionLess(v1, v2 string) bool

VersionLess 使用版本比较算法比较版本 v1 与版本 v2,如果 v1 小于 v2 返回 true,否则返回 false Example: ``` str.VersionLess("0.9.9", "1.0.0") // true str.VersionLess("3.0", "3.0a") // true ```

func VersionLessEqual

func VersionLessEqual(v1, v2 string) bool

VersionLessEqual 使用版本比较算法比较版本 v1 与版本 v2,如果 v1 小于等于 v2 返回 true,否则返回 false Example: ``` str.VersionLessEqual("0.9.9", "1.0.0") // true str.VersionLessEqual("3.0", "3.0") // true str.VersionLessEqual("3.0a", "3.0") // false ```

func WaitConnect

func WaitConnect(addr string, timeout float64) error

func WaitRoutinesFromSlice added in v1.2.6

func WaitRoutinesFromSlice[T any](arg []T, job func(T))

func Wrap added in v1.2.8

func Wrap(err error, msg string) error

func Wrapf added in v1.2.8

func Wrapf(err error, format string, args ...interface{}) error

func XmlDumps added in v1.3.0

func XmlDumps(v interface{}) []byte

func XmlEscape added in v1.3.0

func XmlEscape(s []byte) string

func XmlLoads added in v1.3.0

func XmlLoads(v interface{}) map[string]any

func ZlibCompress

func ZlibCompress(i interface{}) ([]byte, error)

func ZlibDeCompress

func ZlibDeCompress(ret []byte) ([]byte, error)

Types

type AtomicBool

type AtomicBool int32

AtomicBool is an atomic Boolean Its methods are all atomic, thus safe to be called by multiple goroutines simultaneously Note: When embedding into a struct, one should always use *AtomicBool to avoid copy

Example
cond := NewAtomicBool() // default to false
cond.Set()              // set to true
cond.IsSet()            // returns true
cond.UnSet()            // set to false
cond.SetTo(true)        // set to whatever you want
Output:

func NewAtomicBool

func NewAtomicBool() *AtomicBool

New creates an AtomicBool with default to false

func NewBool

func NewBool(ok bool) *AtomicBool

NewBool creates an AtomicBool with given default value

func (*AtomicBool) IsSet

func (ab *AtomicBool) IsSet() bool

IsSet returns whether the Boolean is true

func (*AtomicBool) Set

func (ab *AtomicBool) Set()

Set sets the Boolean to true

func (*AtomicBool) SetTo

func (ab *AtomicBool) SetTo(yes bool)

SetTo sets the boolean with given Boolean

func (*AtomicBool) SetToIf

func (ab *AtomicBool) SetToIf(old, new bool) (set bool)

SetToIf sets the Boolean to new only if the Boolean matches the old Returns whether the set was done

func (*AtomicBool) UnSet

func (ab *AtomicBool) UnSet()

UnSet sets the Boolean to false

type BruteDictParser

type BruteDictParser struct {
	UserDictFile, PassDictFile *os.File
	UserDict, PassDict         *bufio.Scanner
	// contains filtered or unexported fields
}

func NewBruteDictParser

func NewBruteDictParser(userDict, passDict string) (*BruteDictParser, error)

func (*BruteDictParser) Next

func (b *BruteDictParser) Next() (*UserPassPair, error)

type BufferedPeekableConn

type BufferedPeekableConn struct {
	net.Conn
	// contains filtered or unexported fields
}

func NewPeekableNetConn

func NewPeekableNetConn(r net.Conn) *BufferedPeekableConn

func (*BufferedPeekableConn) GetBuf

func (b *BufferedPeekableConn) GetBuf() []byte

func (*BufferedPeekableConn) GetOriginConn

func (b *BufferedPeekableConn) GetOriginConn() net.Conn

func (*BufferedPeekableConn) GetReader

func (b *BufferedPeekableConn) GetReader() io.Reader

func (*BufferedPeekableConn) Peek

func (b *BufferedPeekableConn) Peek(i int) ([]byte, error)

func (*BufferedPeekableConn) PeekByte

func (b *BufferedPeekableConn) PeekByte() (byte, error)

func (*BufferedPeekableConn) PeekUint16

func (b *BufferedPeekableConn) PeekUint16() uint16

func (*BufferedPeekableConn) Read

func (b *BufferedPeekableConn) Read(buf []byte) (int, error)

func (*BufferedPeekableConn) SetBuf

func (b *BufferedPeekableConn) SetBuf(buf []byte)

type BufferedPeekableReader

type BufferedPeekableReader struct {
	io.Reader
	// contains filtered or unexported fields
}

func NewPeekableReader

func NewPeekableReader(r io.Reader) *BufferedPeekableReader

func (*BufferedPeekableReader) GetBuf

func (b *BufferedPeekableReader) GetBuf() []byte

func (*BufferedPeekableReader) GetReader

func (b *BufferedPeekableReader) GetReader() io.Reader

func (*BufferedPeekableReader) Peek

func (b *BufferedPeekableReader) Peek(i int) ([]byte, error)

func (*BufferedPeekableReader) Read

func (b *BufferedPeekableReader) Read(buf []byte) (int, error)

func (*BufferedPeekableReader) SetBuf

func (b *BufferedPeekableReader) SetBuf(buf []byte)

type BufferedPeekableReaderWriter

type BufferedPeekableReaderWriter struct {
	io.ReadWriter
	// contains filtered or unexported fields
}

func NewPeekableReaderWriter

func NewPeekableReaderWriter(r io.ReadWriter) *BufferedPeekableReaderWriter

func (*BufferedPeekableReaderWriter) GetBuf

func (b *BufferedPeekableReaderWriter) GetBuf() []byte

func (*BufferedPeekableReaderWriter) GetReader

func (b *BufferedPeekableReaderWriter) GetReader() io.Reader

func (*BufferedPeekableReaderWriter) Peek

func (b *BufferedPeekableReaderWriter) Peek(i int) ([]byte, error)

func (*BufferedPeekableReaderWriter) Read

func (b *BufferedPeekableReaderWriter) Read(buf []byte) (int, error)

func (*BufferedPeekableReaderWriter) SetBuf

func (b *BufferedPeekableReaderWriter) SetBuf(buf []byte)

type Cache added in v1.3.1

type Cache[T any] struct {
	*CacheWithKey[string, T]
}

Cache is a synchronized map of items that can auto-expire once stale

func NewTTLCache added in v1.3.1

func NewTTLCache[T any](ttls ...time.Duration) *Cache[T]

NewTTLCache is a helper to create instance of the Cache struct

type CacheWithKey added in v1.3.2

type CacheWithKey[U comparable, T any] struct {
	// contains filtered or unexported fields
}

func NewTTLCacheWithKey added in v1.3.2

func NewTTLCacheWithKey[U comparable, T any](ttls ...time.Duration) *CacheWithKey[U, T]

NewTTLCacheWithKey is a helper to create instance of the CacheWithKey struct, allow set Key and Value

func (*CacheWithKey[U, T]) Close added in v1.3.2

func (cache *CacheWithKey[U, T]) Close()

Close calls Purge, and then stops the goroutine that does ttl checking, for a clean shutdown. The cache is no longer cleaning up after the first call to Close, repeated calls are safe though.

func (*CacheWithKey[U, T]) Count added in v1.3.2

func (cache *CacheWithKey[U, T]) Count() int

Count returns the number of items in the cache

func (*CacheWithKey[U, T]) ForEach added in v1.3.2

func (cache *CacheWithKey[U, T]) ForEach(handler func(U, T))

func (*CacheWithKey[U, T]) Get added in v1.3.2

func (cache *CacheWithKey[U, T]) Get(key U) (value T, exists bool)

Get is a thread-safe way to lookup items Every lookup, also touches the item, hence extending it's life

func (*CacheWithKey[U, T]) GetAll added in v1.3.2

func (cache *CacheWithKey[U, T]) GetAll() map[U]T

func (*CacheWithKey[U, T]) Purge added in v1.3.2

func (cache *CacheWithKey[U, T]) Purge()

Purge will remove all entries

func (*CacheWithKey[U, T]) Remove added in v1.3.2

func (cache *CacheWithKey[U, T]) Remove(key U) bool

func (*CacheWithKey[U, T]) Set added in v1.3.2

func (cache *CacheWithKey[U, T]) Set(key U, data T)

Set is a thread-safe way to add new items to the map

func (*CacheWithKey[U, T]) SetCheckExpirationCallback added in v1.3.2

func (cache *CacheWithKey[U, T]) SetCheckExpirationCallback(callback checkExpireCallback[U, T])

SetCheckExpirationCallback sets a callback that will be called when an item is about to expire in order to allow external code to decide whether the item expires or remains for another TTL cycle

func (*CacheWithKey[U, T]) SetExpirationCallback added in v1.3.2

func (cache *CacheWithKey[U, T]) SetExpirationCallback(callback expireCallback[U, T])

SetExpirationCallback sets a callback that will be called when an item expires

func (*CacheWithKey[U, T]) SetNewItemCallback added in v1.3.2

func (cache *CacheWithKey[U, T]) SetNewItemCallback(callback expireCallback[U, T])

SetNewItemCallback sets a callback that will be called when a new item is added to the cache

func (*CacheWithKey[U, T]) SetTTL added in v1.3.2

func (cache *CacheWithKey[U, T]) SetTTL(ttl time.Duration)

func (*CacheWithKey[U, T]) SetWithTTL added in v1.3.2

func (cache *CacheWithKey[U, T]) SetWithTTL(key U, data T, ttl time.Duration)

SetWithTTL is a thread-safe way to add new items to the map with individual ttl

func (*CacheWithKey[U, T]) SkipTtlExtensionOnHit added in v1.3.2

func (cache *CacheWithKey[U, T]) SkipTtlExtensionOnHit(value bool)

SkipTtlExtensionOnHit allows the user to change the cache behaviour. When this flag is set to true it will no longer extend TTL of items when they are retrieved using Get, or when their expiration condition is evaluated using SetCheckExpirationCallback.

type CircularQueue added in v1.2.2

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

func NewCircularQueue added in v1.2.2

func NewCircularQueue(capacity int) *CircularQueue

func (*CircularQueue) GetElements added in v1.2.2

func (q *CircularQueue) GetElements() []interface{}

func (*CircularQueue) Push added in v1.2.2

func (q *CircularQueue) Push(x interface{})

type Complex added in v1.3.1

type Complex interface {
	~complex64 | ~complex128
}

Complex is a constraint that permits any complex numeric type. If future releases of Go add new predeclared complex numeric types, this constraint will be modified to include them.

type CoolDown

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

func NewCoolDown

func NewCoolDown(d time.Duration) *CoolDown

func NewCoolDownContext

func NewCoolDownContext(d time.Duration, ctx context.Context) *CoolDown

func (*CoolDown) Do

func (c *CoolDown) Do(f func())

func (*CoolDown) DoOr

func (c *CoolDown) DoOr(f func(), fallback func())

func (*CoolDown) Reset

func (c *CoolDown) Reset(d time.Duration)

type CountingReadWriter added in v1.3.2

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

CountingReadWriter 是一个包装了 io.Writer 的结构体,用于统计写入的字符数

func NewCountingReadWriter added in v1.3.2

func NewCountingReadWriter(w io.ReadWriter) *CountingReadWriter

NewCountingReadWriter 返回一个新的 CountingWriter,它包装了给定的 io.Writer

func (*CountingReadWriter) Count added in v1.3.2

func (cw *CountingReadWriter) Count() int

Count 返回到目前为止写入的字符数

func (*CountingReadWriter) Read added in v1.3.2

func (cr *CountingReadWriter) Read(p []byte) (n int, err error)

Read 实现了 io.Reader 接口,读取数据的同时统计字符数

func (*CountingReadWriter) Write added in v1.3.2

func (cw *CountingReadWriter) Write(p []byte) (n int, err error)

Write 实现了 io.Writer 接口,写入数据的同时统计字符数

type CountingReader added in v1.3.2

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

CountingReader 是一个包装了 io.Reader 的结构体,用于统计读取的字符数

func NewCountingReader added in v1.3.2

func NewCountingReader(r io.Reader) *CountingReader

NewCountingReader 返回一个新的 CountingReader,它包装了给定的 io.Reader

func (*CountingReader) Count added in v1.3.2

func (cr *CountingReader) Count() int

Count 返回到目前为止读取的字符数

func (*CountingReader) Read added in v1.3.2

func (cr *CountingReader) Read(p []byte) (n int, err error)

Read 实现了 io.Reader 接口,读取数据的同时统计字符数

type CountingWriter added in v1.3.2

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

CountingWriter 是一个包装了 io.Writer 的结构体,用于统计写入的字符数

func NewCountingWriter added in v1.3.2

func NewCountingWriter(w io.Writer) *CountingWriter

NewCountingWriter 返回一个新的 CountingWriter,它包装了给定的 io.Writer

func (*CountingWriter) Count added in v1.3.2

func (cw *CountingWriter) Count() int

Count 返回到目前为止写入的字符数

func (*CountingWriter) Write added in v1.3.2

func (cw *CountingWriter) Write(p []byte) (n int, err error)

Write 实现了 io.Writer 接口,写入数据的同时统计字符数

type CustomWriter added in v1.2.8

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

func NewWriter added in v1.2.8

func NewWriter(f func(p []byte) (n int, err error)) *CustomWriter

func (*CustomWriter) Write added in v1.2.8

func (c *CustomWriter) Write(p []byte) (n int, err error)

type DelayWaiter

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

delay with range

func NewDelayWaiter

func NewDelayWaiter(min int32, max int32) (*DelayWaiter, error)

func (*DelayWaiter) Wait

func (d *DelayWaiter) Wait()

func (*DelayWaiter) WaitWithProbabilityPercent

func (d *DelayWaiter) WaitWithProbabilityPercent(raw float64)

type FileInfo

type FileInfo struct {
	BuildIn os.FileInfo
	Path    string
	Name    string
	IsDir   bool
}

func ReadDir

func ReadDir(p string) ([]*FileInfo, error)

func ReadDirWithLimit

func ReadDirWithLimit(p string, limit int) ([]*FileInfo, error)

func ReadDirsRecursively

func ReadDirsRecursively(p string) ([]*FileInfo, error)

func ReadFilesRecursively

func ReadFilesRecursively(p string) ([]*FileInfo, error)

func ReadFilesRecursivelyWithLimit

func ReadFilesRecursivelyWithLimit(p string, limit int) ([]*FileInfo, error)

type FileOpenerType added in v1.2.8

type FileOpenerType func(s string) (*os.File, error)

type Float added in v1.3.1

type Float interface {
	~float32 | ~float64
}

Float is a constraint that permits any floating-point type. If future releases of Go add new predeclared floating-point types, this constraint will be modified to include them.

type FloatSecondsDelayWaiter

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

delay with range

func NewFloatSecondsDelayWaiter

func NewFloatSecondsDelayWaiter(min, max float64) (*FloatSecondsDelayWaiter, error)

func NewFloatSecondsDelayWaiterSingle

func NewFloatSecondsDelayWaiterSingle(min float64) (*FloatSecondsDelayWaiter, error)

func (*FloatSecondsDelayWaiter) Wait

func (d *FloatSecondsDelayWaiter) Wait()

func (*FloatSecondsDelayWaiter) WaitWithProbabilityPercent

func (d *FloatSecondsDelayWaiter) WaitWithProbabilityPercent(raw float64)

type Frame added in v1.2.8

type Frame uintptr

Frame represents a program counter inside a stack frame. For historical reasons if Frame is interpreted as a uintptr its value represents the program counter + 1.

func (Frame) Format added in v1.2.8

func (f Frame) Format(s fmt.State, verb rune)

Format formats the frame according to the fmt.Formatter interface.

%s    source file
%d    source line
%n    function name
%v    equivalent to %s:%d

Format accepts flags that alter the printing of some verbs, as follows:

%+s   function name and path of source file relative to the compile time
      GOPATH separated by \n\t (<funcname>\n\t<path>)
%+v   equivalent to %+s:%d

func (Frame) MarshalText added in v1.2.8

func (f Frame) MarshalText() ([]byte, error)

MarshalText formats a stacktrace Frame as a text string. The output is the same as that of fmt.Sprintf("%+v", f), but without newlines or tabs.

type HTTPPacketFilter

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

func NewHTTPPacketFilter

func NewHTTPPacketFilter() *HTTPPacketFilter

func (*HTTPPacketFilter) Conditions

func (j *HTTPPacketFilter) Conditions() []string

func (*HTTPPacketFilter) Hash

func (h *HTTPPacketFilter) Hash() string

func (*HTTPPacketFilter) IsAllowed

func (h *HTTPPacketFilter) IsAllowed(req *http.Request, rsp *http.Response) bool

func (*HTTPPacketFilter) Remove

func (i *HTTPPacketFilter) Remove(name string)

func (*HTTPPacketFilter) SetAllowForRequestHeader

func (j *HTTPPacketFilter) SetAllowForRequestHeader(header, regexp string)

func (*HTTPPacketFilter) SetAllowForRequestPath

func (j *HTTPPacketFilter) SetAllowForRequestPath(regexp string)

func (*HTTPPacketFilter) SetAllowForRequestRaw

func (j *HTTPPacketFilter) SetAllowForRequestRaw(regexp string)

func (*HTTPPacketFilter) SetAllowForResponseHeader

func (j *HTTPPacketFilter) SetAllowForResponseHeader(header, regexp string)

func (*HTTPPacketFilter) SetAllowForResponseRaw

func (j *HTTPPacketFilter) SetAllowForResponseRaw(regexp string)

func (*HTTPPacketFilter) SetRejectForRequestHeader

func (j *HTTPPacketFilter) SetRejectForRequestHeader(header, regexp string)

func (*HTTPPacketFilter) SetRejectForRequestPath

func (j *HTTPPacketFilter) SetRejectForRequestPath(regexp string)

func (*HTTPPacketFilter) SetRejectForRequestRaw

func (j *HTTPPacketFilter) SetRejectForRequestRaw(regexp string)

func (*HTTPPacketFilter) SetRejectForResponseHeader

func (j *HTTPPacketFilter) SetRejectForResponseHeader(header, regexp string)

func (*HTTPPacketFilter) SetRejectForResponseRaw

func (j *HTTPPacketFilter) SetRejectForResponseRaw(regexp string)

type HostPortClassifier

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

func NewHostPortClassifier

func NewHostPortClassifier() *HostPortClassifier

func (*HostPortClassifier) AddHostPort

func (h *HostPortClassifier) AddHostPort(tag string, hosts []string, ports []string, ttl time.Duration) error

func (*HostPortClassifier) FilterTagByHostPort

func (h *HostPortClassifier) FilterTagByHostPort(host string, port int) []string

type HostsFilter

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

func NewHostsFilter

func NewHostsFilter(excludeHosts ...string) *HostsFilter

func (*HostsFilter) Add

func (f *HostsFilter) Add(block ...string)

func (*HostsFilter) Contains

func (f *HostsFilter) Contains(target string) bool

type Integer added in v1.3.1

type Integer interface {
	Signed | Unsigned
}

Integer is a constraint that permits any integer type. If future releases of Go add new predeclared integer types, this constraint will be modified to include them.

type LimitRate

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

func NewLimitRate

func NewLimitRate(d time.Duration) *LimitRate

func (*LimitRate) WaitUntilNextAsync

func (l *LimitRate) WaitUntilNextAsync()

func (*LimitRate) WaitUntilNextAsyncWithFallback

func (l *LimitRate) WaitUntilNextAsyncWithFallback(f func())

func (*LimitRate) WaitUntilNextSync

func (l *LimitRate) WaitUntilNextSync()

type MatchedRule

type MatchedRule struct {
	Matched *regexp.Regexp
}

func ParseNmapServiceMatchedRule

func ParseNmapServiceMatchedRule(raw []byte) []*MatchedRule

type Ordered added in v1.3.1

type Ordered interface {
	Integer | Float | ~string
}

Ordered is a constraint that permits any ordered type: any type that supports the operators < <= >= >. If future releases of Go add new ordered types, this constraint will be modified to include them.

type PathForest

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

func GeneratePathTrees

func GeneratePathTrees(l ...string) (*PathForest, error)

func (*PathForest) Output

func (p *PathForest) Output() []*PathNode

func (*PathForest) Recursive added in v1.3.2

func (p *PathForest) Recursive(f func(node2 *PathNode))

type PathNode added in v1.3.2

type PathNode struct {
	Parent        *PathNode `json:"-"`
	Path          string    `json:"path"`
	RelativePaths []string  `json:"relative_paths"`
	Name          string    `json:"name"`

	Children []*PathNode `json:"children"`
	Depth    int         `json:"depth"`
	// contains filtered or unexported fields
}

func (*PathNode) AllChildren added in v1.3.2

func (p *PathNode) AllChildren() []*PathNode

func (*PathNode) GetDepth added in v1.3.2

func (n *PathNode) GetDepth() int

type PathNodes

type PathNodes []*PathNode

type PipeReader added in v1.2.8

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

A PipeReader is the read half of a pipe.

func (*PipeReader) BytesBuffer added in v1.2.8

func (p *PipeReader) BytesBuffer() *bytes.Buffer

func (*PipeReader) Close added in v1.2.8

func (r *PipeReader) Close() error

Close closes the reader; subsequent writes from the write half of the pipe will return error ErrClosedPipe.

func (*PipeReader) CloseWithError added in v1.2.8

func (r *PipeReader) CloseWithError(err error) error

CloseWithError closes the reader; subsequent writes to the write half of the pipe will return the error err.

func (*PipeReader) Count added in v1.3.2

func (p *PipeReader) Count() int

func (*PipeReader) Read added in v1.2.8

func (r *PipeReader) Read(data []byte) (int, error)

Read implements the standard Read interface: it reads data from the pipe, reading from the internal buffer, otherwise blocking until a writer arrives or the write end is closed. If the write end is closed with an error, that error is returned as err; otherwise err is io.EOF.

type PipeWriter added in v1.2.8

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

A PipeWriter is the write half of a pipe.

func (*PipeWriter) BytesBuffer added in v1.2.8

func (p *PipeWriter) BytesBuffer() *bytes.Buffer

func (*PipeWriter) Close added in v1.2.8

func (w *PipeWriter) Close() error

Close closes the writer; subsequent reads from the read half of the pipe will return io.EOF once the internal buffer get empty.

func (*PipeWriter) CloseWithError added in v1.2.8

func (w *PipeWriter) CloseWithError(err error) error

CloseWithError closes the writer; subsequent reads from the read half of the pipe will return err once the internal buffer get empty.

func (*PipeWriter) Count added in v1.3.2

func (p *PipeWriter) Count() int

func (*PipeWriter) Write added in v1.2.8

func (w *PipeWriter) Write(data []byte) (int, error)

Write implements the standard Write interface: it writes data to the internal buffer. If the read end is closed with an error, that err is returned as err; otherwise err is ErrClosedPipe.

type PortScanTarget

type PortScanTarget struct {
	Targets []string
	TCPPort string
	UDPPort string
}

func SplitHostsAndPorts

func SplitHostsAndPorts(hosts, ports string, portGroupSize int, proto string) []PortScanTarget

func (*PortScanTarget) String

func (t *PortScanTarget) String() string

type PortsFilter

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

func NewPortsFilter

func NewPortsFilter(blocks ...string) *PortsFilter

func (*PortsFilter) Add

func (f *PortsFilter) Add(block ...string)

func (*PortsFilter) Contains

func (f *PortsFilter) Contains(port int) bool

type ProbeRule

type ProbeRule struct {
	Type    ProtoType
	Payload []byte
	Matched []*MatchedRule
}

func ParseNmapServiceProbeRule

func ParseNmapServiceProbeRule(raw []byte) []*ProbeRule

type ProtoType

type ProtoType string
var (
	TCPProbe ProtoType = "tcp"
	UDPProbe ProtoType = "udp"
)

type Quake360Client

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

func NewQuake360Client

func NewQuake360Client(apiKey string) *Quake360Client

func (*Quake360Client) QueryNext

func (q *Quake360Client) QueryNext(start, size int, queries ...string) (*gjson.Result, error)

func (*Quake360Client) UserInfo

func (q *Quake360Client) UserInfo() (*quakeUserInfo, error)

type SSHClient

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

func SSHDial

func SSHDial(network, addr string, config *ssh.ClientConfig) (*SSHClient, error)

SSHDial starts a client connection to the given SSH server. This is wrap the ssh.SSHDial

func SSHDialWithKey

func SSHDialWithKey(addr, user, keyfile string) (*SSHClient, error)

SSHDialWithKey starts a client connection to the given SSH server with key authmethod.

func SSHDialWithKeyWithPassphrase

func SSHDialWithKeyWithPassphrase(addr, user, keyfile string, passphrase string) (*SSHClient, error)

SSHDialWithKeyWithPassphrase same as SSHDialWithKey but with a passphrase to decrypt the private key

func SSHDialWithPasswd

func SSHDialWithPasswd(addr, user, passwd string) (*SSHClient, error)

SSHDialWithPasswd starts a client connection to the given SSH server with passwd authmethod.

func (*SSHClient) Close

func (c *SSHClient) Close() error

func (*SSHClient) Cmd

func (c *SSHClient) Cmd(cmd string) *SSHRemoteScript

Cmd create a command on client

func (*SSHClient) CopyLocalFileToRemote

func (c *SSHClient) CopyLocalFileToRemote(srcFilePath string, dstFilePath string) error

Copy local file to remote

func (*SSHClient) CopyRemoteFileToLocal

func (c *SSHClient) CopyRemoteFileToLocal(dstFilePath string, srcFilePath string) error

Copy remote file to local

func (*SSHClient) Script

func (c *SSHClient) Script(script string) *SSHRemoteScript

Script

func (*SSHClient) ScriptFile

func (c *SSHClient) ScriptFile(fname string) *SSHRemoteScript

ScriptFile

func (*SSHClient) Shell

func (c *SSHClient) Shell() *SSHRemoteShell

Shell create a noninteractive shell on client.

func (*SSHClient) Terminal

func (c *SSHClient) Terminal(config *TerminalConfig) *SSHRemoteShell

Terminal create a interactive shell on client.

type SSHRemoteScript

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

func (*SSHRemoteScript) Cmd

func (rs *SSHRemoteScript) Cmd(cmd string) *SSHRemoteScript

func (*SSHRemoteScript) Output

func (rs *SSHRemoteScript) Output() ([]byte, error)

func (*SSHRemoteScript) Run

func (rs *SSHRemoteScript) Run() error

Run

func (*SSHRemoteScript) SetStdio

func (rs *SSHRemoteScript) SetStdio(stdout, stderr io.Writer) *SSHRemoteScript

func (*SSHRemoteScript) SmartOutput

func (rs *SSHRemoteScript) SmartOutput() ([]byte, error)

type SSHRemoteScriptType

type SSHRemoteScriptType byte

type SSHRemoteShell

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

func (*SSHRemoteShell) SetStdio

func (rs *SSHRemoteShell) SetStdio(stdin io.Reader, stdout, stderr io.Writer) *SSHRemoteShell

func (*SSHRemoteShell) Start

func (rs *SSHRemoteShell) Start() error

Start start a remote shell on client

type SSHRemoteShellType

type SSHRemoteShellType byte

type Set

type Set[T comparable] struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewSet added in v1.2.3

func NewSet[T comparable](list ...[]T) *Set[T]

func (*Set[T]) Add

func (s *Set[T]) Add(item T)

Add add

func (*Set[T]) AddList added in v1.2.6

func (s *Set[T]) AddList(items []T)

func (*Set[T]) And added in v1.3.1

func (s *Set[T]) And(other *Set[T]) *Set[T]

func (*Set[T]) Clear

func (s *Set[T]) Clear()

Clear removes all items from the set

func (*Set[T]) Diff added in v1.3.1

func (s *Set[T]) Diff(other *Set[T]) *Set[T]

func (*Set[T]) ForEach added in v1.3.1

func (s *Set[T]) ForEach(h func(T))

func (*Set[T]) Has

func (s *Set[T]) Has(item T) bool

Has looks for the existence of an item

func (*Set[T]) IsEmpty

func (s *Set[T]) IsEmpty() bool

IsEmpty checks for emptiness

func (*Set[T]) Len

func (s *Set[T]) Len() int

Len returns the number of items in a set.

func (*Set[T]) List

func (s *Set[T]) List() []T

Set returns a slice of all items

func (*Set[T]) Or added in v1.3.1

func (s *Set[T]) Or(other *Set[T]) *Set[T]

func (*Set[T]) Remove

func (s *Set[T]) Remove(item T)

Remove deletes the specified item from the map

type Signed added in v1.3.1

type Signed interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64
}

Signed is a constraint that permits any signed integer type. If future releases of Go add new predeclared signed integer types, this constraint will be modified to include them.

type SizedWaitGroup

type SizedWaitGroup struct {
	Size              int
	WaitingEventCount atomic.Int64
	// contains filtered or unexported fields
}

SizedWaitGroup has the same role and close to the same API as the Golang sync.WaitGroup but adds a limit of the amount of goroutines started concurrently.

func NewSizedWaitGroup

func NewSizedWaitGroup(limit int, ctxs ...context.Context) *SizedWaitGroup

New creates a SizedWaitGroup. The limit parameter is the maximum amount of goroutines which can be started concurrently.

func (*SizedWaitGroup) Add

func (s *SizedWaitGroup) Add(delta ...int)

Add increments the internal WaitGroup counter. It can be blocking if the limit of spawned goroutines has been reached. It will stop blocking when Done is been called.

See sync.WaitGroup documentation for more information.

func (*SizedWaitGroup) AddWithContext

func (s *SizedWaitGroup) AddWithContext(ctx context.Context, delta ...int) error

AddWithContext increments the internal WaitGroup counter. It can be blocking if the limit of spawned goroutines has been reached. It will stop blocking when Done is been called, or when the context is canceled. Returns nil on success or an error if the context is canceled before the lock is acquired.

See sync.WaitGroup documentation for more information.

func (*SizedWaitGroup) Done

func (s *SizedWaitGroup) Done()

Done decrements the SizedWaitGroup counter. See sync.WaitGroup documentation for more information.

func (*SizedWaitGroup) SetContext added in v1.3.2

func (s *SizedWaitGroup) SetContext(ctx context.Context)

SetContext sets the context for the SizedWaitGroup. ! If Call twice or more, any of the previous context Done will cause the WaitGroup to be SetZero.

func (*SizedWaitGroup) SetZero added in v1.3.2

func (s *SizedWaitGroup) SetZero()

func (*SizedWaitGroup) Wait

func (s *SizedWaitGroup) Wait()

Wait blocks until the SizedWaitGroup counter is zero. See sync.WaitGroup documentation for more information.

type Stack

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

func NewStack

func NewStack[T any]() *Stack[T]

Create a new stack

func (*Stack[T]) CreateShadowStack added in v1.2.8

func (this *Stack[T]) CreateShadowStack() func()

CreateShadowStack creates a shadow stack, which can be used to restore the stack to its current state. dont pop the top item of the stack.

func (*Stack[T]) HaveLastStackValue added in v1.3.0

func (this *Stack[T]) HaveLastStackValue() bool

func (*Stack[T]) IsEmpty

func (this *Stack[T]) IsEmpty() bool

func (*Stack[T]) LastStackValue added in v1.3.0

func (this *Stack[T]) LastStackValue() T

func (*Stack[T]) Len added in v1.2.8

func (this *Stack[T]) Len() int

Return the number of items in the stack

func (*Stack[T]) Peek

func (this *Stack[T]) Peek() T

View the top item on the stack

func (*Stack[T]) PeekN added in v1.2.8

func (this *Stack[T]) PeekN(n int) T

View the top n item on the stack

func (*Stack[T]) Pop

func (this *Stack[T]) Pop() T

Pop the top item of the stack and return it

func (*Stack[T]) PopN added in v1.3.0

func (this *Stack[T]) PopN(n int) []T

PopN the top item of the stack and return it

func (*Stack[T]) Push

func (this *Stack[T]) Push(value T)

Push a value onto the top of the stack

func (*Stack[T]) Size

func (this *Stack[T]) Size() int

type StackTrace added in v1.2.8

type StackTrace []Frame

StackTrace is stack of Frames from innermost (newest) to outermost (oldest).

func (StackTrace) Format added in v1.2.8

func (st StackTrace) Format(s fmt.State, verb rune)

Format formats the stack of Frames according to the fmt.Formatter interface.

%s	lists source files for each Frame in the stack
%v	lists the source file and line number for each Frame in the stack

Format accepts flags that alter the printing of some verbs, as follows:

%+v   Prints filename, function, and line number for each Frame in the stack.

type StringMap added in v1.3.0

type StringMap map[string]interface{}

func (StringMap) MarshalXML added in v1.3.0

func (m StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error

func (*StringMap) UnmarshalXML added in v1.3.0

func (m *StringMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type StringRoundRobinSelector

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

func NewStringRoundRobinSelector

func NewStringRoundRobinSelector(l ...string) *StringRoundRobinSelector

func (*StringRoundRobinSelector) Add

func (s *StringRoundRobinSelector) Add(raw ...string)

func (*StringRoundRobinSelector) Len

func (s *StringRoundRobinSelector) Len() int

func (*StringRoundRobinSelector) List

func (s *StringRoundRobinSelector) List() []string

func (*StringRoundRobinSelector) Next

func (s *StringRoundRobinSelector) Next() string

type Switch added in v1.3.1

type Switch struct {
	*sync.Cond
	// contains filtered or unexported fields
}

func NewSwitch added in v1.3.1

func NewSwitch(b ...bool) *Switch

func (*Switch) Condition added in v1.3.1

func (c *Switch) Condition() bool

func (*Switch) Switch added in v1.3.1

func (c *Switch) Switch()

func (*Switch) SwitchTo added in v1.3.1

func (c *Switch) SwitchTo(b bool)

func (*Switch) WaitUntilOpen added in v1.3.1

func (c *Switch) WaitUntilOpen()

type TerminalConfig

type TerminalConfig struct {
	Term   string
	Height int
	Weight int
	Modes  ssh.TerminalModes
}

type TriggerWriter added in v1.2.8

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

func NewTriggerWriter added in v1.2.8

func NewTriggerWriter(trigger uint64, h func(buffer io.ReadCloser)) *TriggerWriter

func (*TriggerWriter) Close added in v1.2.8

func (f *TriggerWriter) Close() error

func (*TriggerWriter) GetCount added in v1.2.8

func (f *TriggerWriter) GetCount() int64

func (*TriggerWriter) Write added in v1.2.8

func (f *TriggerWriter) Write(p []byte) (n int, err error)

type TrimLeftReader added in v1.3.2

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

TrimLeftReader wraps an io.Reader and trims leading white space from the input.

func NewTrimLeftReader added in v1.3.2

func NewTrimLeftReader(r io.Reader) *TrimLeftReader

func (*TrimLeftReader) Read added in v1.3.2

func (t *TrimLeftReader) Read(p []byte) (int, error)

Read implements the io.Reader interface for TrimLeftReader.

type Unsigned added in v1.3.1

type Unsigned interface {
	~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr
}

Unsigned is a constraint that permits any unsigned integer type. If future releases of Go add new predeclared unsigned integer types, this constraint will be modified to include them.

type UserPassPair

type UserPassPair struct {
	Username, Password     string
	UserOffset, PassOffset int64
}

type VirtualEditor added in v1.3.2

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

VirtualEditor 定义了一个虚拟编辑器的结构体

func NewVirtualEditor added in v1.3.2

func NewVirtualEditor(sourceCode string) *VirtualEditor

NewVirtualEditor 是一个工厂函数,用于创建VirtualEditor实例

func (*VirtualEditor) GetEndOffsetByLine added in v1.3.2

func (ve *VirtualEditor) GetEndOffsetByLine(x int) (int, error)

GetEndOffsetByLine 是一个指针方法,用于获取指定行号的结束偏移量 行号为了对齐antlr4的行号,从1开始计数

func (*VirtualEditor) GetOffsetByPosition added in v1.3.2

func (ve *VirtualEditor) GetOffsetByPosition(x, y int) (int, error)

GetOffsetByPosition 是一个指针方法,用于获取指定行号和列号在sourceCode中的偏移量 行号为了对齐antlr4的行号,从1开始计数

func (*VirtualEditor) GetStartOffsetByLine added in v1.3.2

func (ve *VirtualEditor) GetStartOffsetByLine(x int) (int, error)

GetStartOffsetByLine 是一个指针方法,用于获取指定行号的起始偏移量 行号为了对齐antlr4的行号和列号,从1开始计数

type WebHookServer

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

func NewWebHookServer

func NewWebHookServer(port int, cb func(data interface{})) *WebHookServer

func (*WebHookServer) Addr

func (w *WebHookServer) Addr() string

func (*WebHookServer) Shutdown

func (w *WebHookServer) Shutdown()

func (*WebHookServer) Start

func (w *WebHookServer) Start()

type YakError added in v1.2.8

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

func (*YakError) Cause added in v1.2.8

func (err *YakError) Cause() []error

func (*YakError) Error added in v1.2.8

func (err *YakError) Error() string

func (*YakError) ErrorWithStack added in v1.3.2

func (e *YakError) ErrorWithStack() string

func (*YakError) Format added in v1.2.8

func (err *YakError) Format(s fmt.State, verb rune)

func (*YakError) Is added in v1.2.9

func (e *YakError) Is(rerr error) bool

func (YakError) StackTrace added in v1.2.8

func (s YakError) StackTrace() StackTrace

func (*YakError) Unwrap added in v1.2.8

func (err *YakError) Unwrap() []error

Directories

Path Synopsis
rfb.go
Package dateparse parses date-strings without knowing the format in advance, using a fast lex based approach to eliminate shotgun attempts.
Package dateparse parses date-strings without knowing the format in advance, using a fast lex based approach to eliminate shotgun attempts.
Package htmlquery provides extract data from HTML documents using XPath expression.
Package htmlquery provides extract data from HTML documents using XPath expression.
cmd
poc
cmd
netroute
Originally found in https://github.com/google/gopacket/blob/master/routing/routing.go
Originally found in https://github.com/google/gopacket/blob/master/routing/routing.go
Package pop3 is a simple POP3 e-mail client library.
Package pop3 is a simple POP3 e-mail client library.
go-shodan
Package shodan is an interface for the Shodan API
Package shodan is an interface for the Shodan API
go-pkcs12
Package pkcs12 implements some of PKCS#12 (also known as P12 or PFX).
Package pkcs12 implements some of PKCS#12 (also known as P12 or PFX).
go-pkcs12/rc2
Package rc2 implements the RC2 cipher
Package rc2 implements the RC2 cipher

Jump to

Keyboard shortcuts

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