Skip to main content

Toolkit

This section will introduce how to use the toolkit.

Introduction​

Go-Sail provides a toolkit that contains some commonly used utility functions.

tip

As versions are updated, the supported utility functions will be updated accordingly.

AES​

Encode​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
encoded, err := utils.Aes().Encode(rawStr, key)
}

Decode​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
decoded, err := utils.Aes().Decode(encoded, key)
}

Base64​

Encode​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
encoded, err := utils.Base64().Encode(rawBytes)
}

Decode​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
decoded, err := utils.Base64().Decode(encoded)
}

CRC​

Checksum 32​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Crc32().Checksum(rawBytes, table)
}

Checksum 64​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Crc64().Checksum(rawBytes, table)
}

Checksum ECMA​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Crc64().ChecksumECMA(rawBytes)
}

Checksum IEEE​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Crc32().ChecksumIEEE(rawBytes)
}

Datetime​

Format Date​

main.go
import (
"time"
"github.com/keepchen/go-sail/v3/constants"
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
now := time.Now()
result := utils.Datetime().FormatDate(now, utils.YYYYMMDDHHMMSS)

result := utils.Datetime().FormatDate(now, utils.YYYY_MM_DD_HH_MM_SS_SSS)
}

Parse Date​

main.go
import (
"time"
"github.com/keepchen/go-sail/v3/constants"
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
loc, _ := time.LoadLocation(constants.DefaultTimeZone)
date := "2024-05-01 10:00:00"
timeObj, err := utils.Datetime().ParseDate(date, string(utils.YYYY_MM_DD_HH_MM_SS_SSS), loc)
}

File​

Save to Destination​

from gin.Context

examples/pkg/app/user/http/handler/user.go
import (
"github.com/gin-gonic/gin"
"github.com/keepchen/go-sail/v3/utils"
)

func UserInfo(c *gin.Context) {
...
fileheader, _ := c.FormFile("filename")
err := utils.File().Save2Dst(filehader, "path/to/filename")
...
}

Get Contents​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result, err := utils.File().GetContents("path/to/filename")
}

Write Contents​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
err := utils.File().PutContents(content, "path/to/filename")
}

Append Contents​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
err := utils.File().AppendContents(content, "path/to/filename")
}

Assert File Exists​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ok := utils.File().Exists("path/to/filename")

ok, err := utils.File().ExistsWithError("path/to/filename")
}

Get File Extension​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ext := utils.File().Ext("path/to/filename")
}

Read Line by Line​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
readCh, err := utils.File().GetContentsReadLine("path/to/filename")
for content := range readCh {
fmt.Println(content)
}
}

IP​

Get Local IP​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
localIp, err := utils.IP().GetLocal()
}

MD5​

Encode​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
encoded := utils.MD5().Encode(rawStr)
}

Redis Lock​

tip

The redis lock will automatically renew internally, developers don't need to worry about internal details.

warning

If used independently, you must first initialize the connection using "redis.InitRedis" or "redis.InitRedisCluster".

Try to Get Lock​

Non-blocking

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ok := utils.RedisLocker().TryLock(key)
}

Get Lock​

Blocking mode

main.go
import (
"context"
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ctx, cancel := context.WithDeadline(context.Background())
go func(){
for range ctx.Deadline() {
cancel()
}
}()
utils.RedisLocker().Lock(ctx, key)
}

Unlock​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.RedisLocker().Unlock(key)
}

RSA​

Encrypt​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result, err := utils.RSA().Encrypt(rawString, publicKey)
}

Decrypt​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result, err := utils.RSA().Decrypt(rawString, publicKey)
}

Signal​

Listen for system signals​

Blocking mode

main.go
import (
"sync"
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
...
wg := &sync.WaitGroup{}
...
result, err := utils.Singal().ListeningExit(wg)
}

SM4​

Encrypt​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result, err := utils.SM4().ECBEncrypt(hexKey, rawStr)
}

Decrypt​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result, err := utils.SM4().ECBDecrypt(hexKey, rawStr)
}

String​

Wrap characters​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().Wordwrap(rawStr, 64, "\n")
}

Wrap Redis key​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().WrapRedisKey(appName, key)
}

Random letters​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().RandomLetters(length)
}

Random digits​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().RandomDigitalChars(length)
}

Random complex characters​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().RandomComplexString(length)
}

Reverse​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().Reverse(rawStr)
}

Shuffle​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().Shuffle(rawStr)
}

Left padding​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().PaddingLeft(rawStr, padChar, length)
}

Right padding​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().PaddingRight(rawStr, padChar, length)
}

Padding (both sides)​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.String().PaddingBoth(rawStr, padChar, length)
}

Number​

Random integer in range​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Number().RandomInt64(start, end)
}

Random float in range​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Number().RandomFloat64(start, end)
}

Power calculation​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Number().Pow(x, y)
}

Swagger​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Swagger().PrintSummaryInfo(param)
}
main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.Swagger().PrintControllerInfo(param)
}

Time​

main.go
import (
"github.com/keepchen/go-sail/pkg/constants"
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
result := utils.NewTimeWithTimeZone(constants.DefaultTimeZone).Now().Date()

result := utils.NewTimeWithTimeZone(constants.DefaultTimeZone).Now().Time()

result := utils.NewTimeWithTimeZone(constants.DefaultTimeZone).Now().DateTime()
}

Validator​

Email address​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ok := utils.Validator().Email(email)
}

Identity Card​

Applicable to China

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
ok := utils.Validator().IdentityCard(idCard)
}

Version​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Version().Print(fields)
}

Web Push​

tip

This toolkit method is applicable to PWA.

VAP ID Keys​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
privateKey, publicKey, err := utils.GenerateVAPIDKeys()
}

Send Push Notification​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
privateKey, publicKey, err := utils.WebPush().GenerateVAPIDKeys()
err := utils.WebPush().SendNotification(privateKey, publicKey, subscription, subscribeEmail, payload)
}

Certificate​

Verify Domain and Certificate Match​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Cert().ReportValidity(domain, pemData)
}

Verify Certificate and Private Key Match​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Cert().ReportKeyWhetherMatch(certData, keyData)
}

Domain​

Validate Domain Format​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Domain().Validate(domain)
}

Validate Wildcard Domain Format​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Domain().ValidateWithWildcard(domain)
}

Check CNAME Records​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Domain().LookupCNAME(domain, cnameTarget)
}

GZIP​

Compress​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Gzip().Compress(content)
}

Decompress​

main.go
import (
"github.com/keepchen/go-sail/v3/utils"
)

func main() {
utils.Gzip().Decompress(content)
}