Skip to content

lytdev/go-mykit

Repository files navigation

说明

打造类似hutool的 go 工具箱

安装

go get -u github.com/lytdev/go-mykit

工具概览

更多方法参考官方文档

uuid

  • guid.FastUuid() 使用Uuid4生成不带-的uuid
  • snowflake, _ := guid.NewSnowflake(0) 创建雪花算法生成器

datetime

日期时间推荐使用carbon

  • gdatetime.FormatDateTimeToStr 提取日期为统一格式 yyyy-mm-dd hh:mm:ss
  • gdatetime.FormatDurationToSecond 将持续时间转为秒数 1:01:03
  • gdatetime.TimeToStrAsFormat 获取时间字符串
  • gdatetime.TimeToTimeStampMill 时间转毫秒级别时间戳
  • gdatetime.TimestampSecToTime 秒级别时间戳转时间

文件操作

  • gfile.ReadWithLine 按行读取文件的文本
  • gfile.CopyFile 复制文件
  • gfile.FileDir 获取文件所在的路径
  • gfile.MainName 获取文件的名称,不带后缀

加密解密

加密解密推荐使用dongle

支持excel的读取和写入

  • gexcel.ReadFileToList(filePath, 0, ptr)(resultData []T, err error)读取本地excel文件至切片
  • gexcel.ReadFileStreamToList读取excel文件流至切片
  • gexcel.WriteToFile(sheetName, dataList)(f *excelize.File,err error)写入片切数据至excelize.File对象

对象转换

  • gmap2struct.Decodemap转结构

文件下载

大文件分片下载

import (
    "github.com/lytdev/go-mykit/gdownload"
    "github.com/lytdev/go-mykit/helpers/progress"
)

type Listener struct {
}

//实现监听接口
func (l Listener) ProgressChanged(event *hprogress.ProgressEvent) {
    fmt.Println(event)
}

download := gdownload.Instance{
    //5个线程进行下载
    Workers:  5,
    //每个分片5M
    PartSize: 1024 * 1024 * 5,
    //分片的缓存500KB 
    BufSize:  1024 * 500,
}
httpReader := gdownload.HttpReader{Url: "https://playback-tc.videocc.net/polyvlive/76490dba387702307790940685/f0.mp4"}
err := download.Download(context.Background(), "../testdata/example1.mp4", &httpReader, &Listener{})
if err != nil {
    fmt.Println(err)
    return
}

小文件下载

wc := new(WriteCounter)
wc.SetWatch(func(current, total int, percentage float64) {
	fmt.Printf("\r当前已下载大小 %f MB, 下载进度:%.2f%%, 总大小 %f MB",
		float64(current)/1024/1024,
		percentage,
		float64(total)/1024/1024,
	)
})
downloader := NewWithSingle()

err := downloader.SingleDownload(wc, downloadUrl, "../testdata/example2.mp4")
if err != nil {
	fmt.Println(err)
	return
}