整理一篇golang常用的三方库

568 阅读2分钟

玩golang的一定要看看

每日一库:lo《操作map、slice等,我觉得是功能比较多的库》


每日一库:cast《类型转换的神器》

  • 在 Go 中轻松安全地从一种类型转换为另一种类型,舒服
  • GitHub地址:github.com/spf13/cast
cast.ToString("mayonegg")         // "mayonegg"
cast.ToString(8)                  // "8"
cast.ToString(8.31)               // "8.31"
cast.ToString([]byte("one time")) // "one time"
cast.ToString(nil)                // ""
var foo interface{} = "one more time"
cast.ToString(foo)                // "one more time"

image.png


每日一库:copier《A类型赋值到B类型神器》

  • 从一个字段复制到同名字段
  • 从方法复制到同名字段
  • 从字段复制到具有相同名称的方法
  • 从一个切片复制到另一个切片
  • 从结构体复制到切片
  • 从map复制到map
  • 强制复制带有标签的字段
  • 忽略带标签的字段
  • 深拷贝
  • GitHub地址:github.com/jinzhu/copi…
    var (
        user      = User{Name: "Jinzhu", Age: 18, Role: "Admin", Salary: 200000}
        employees = []Employee{}
    )
    copier.Copy(&employee, &user)

每日一库:conc《控制并发的神器》

简化了并发操作控制

func main() {
    var wg conc.WaitGroup
    wg.Go(doSomethingThatMightPanic)
    // panics with a nice stacktrace
    wg.Wait()
}

控制并发数量为10

func process(stream chan int) {
    p := pool.New().WithMaxGoroutines(10)
    for elem := range stream {
        elem := elem
        p.Go(func() {
           handle(elem)
        })
    }
    p.Wait()
 }

每日一库:threading《go-zero中的控制并发和安全的协程》

安全的协程使用

threading.GoSafe(func() {
    // TODO
})

协程的并发数量控制

func process(stream chan int) {
    wg := sync.WaitGroup{}
    task := threading.NewTaskRunner(10)
    for elem := range stream {
        wg.Add(1)
        elem := elem
        task.Schedule(func() {
            defer wg.Done()
            handle(elem)
        })
    }
    wg.Wait()
}

每日一库:excelize《excel使用》

每日一库:godotenv《加载环境变量》

每日一库:yaml《解析yaml配置文件》

	// 加载配置文件
	configPath := rootDir + "/config/application" + mode + ".yaml"
	yamlFile, err := os.ReadFile(configPath)
	if err != nil {
		log.Panicf("Failed to read file , cause is %s", err.Error())
	}
	config := config.Config{}
	err = yaml.Unmarshal(yamlFile, &config)
	global.CONFIG = config
	if err != nil {
		fmt.Println(err.Error())
	}

持续更新中……