Skip to content

lancet 工具库 ​

阅读提示

  • 适用版本:Go 1.21+(示例在 Go 1.22 下验证)· 前置知识:语法基础-切片 · 阅读时长:约 10 分钟

文档地址:lancet/README_zh-CN.md at main · duke-git/lancet · GitHub

仓库地址:duke-git/lancet: A comprehensive, efficient, and reusable util function library of Go. (github.com)

简介 ​

lancet译为柳叶刀,是一个通用的工具库,包含有并发,网络,文件,时间,类型转换等等工具库。其代码复杂度不高,将平时频繁使用的功能进行了封装,所以在使用的同时lancet对于刚学习Go的人来说是一个很好的学习对象。

使用 ​

TIP

官方的中文文档已经很详细了,并且配有完整的代码示例,所以这里不再赘述如何使用。

完整示例 ​

下面的程序可以直接运行:复制到文件后执行 go run main.go,或粘贴到 Go Playground 运行。

go
package main

import (
	"fmt"
	"strings"
)

func firstNonEmpty(vals ...string) string {
	for _, v := range vals {
		if v != "" {
			return v
		}
	}
	return ""
}

func main() {
	// 常见的 lancet 工具函数,这里用标准库等价实现
	nums := []int{1, 2, 3, 4}
	sum := 0
	for _, n := range nums {
		sum += n
	}
	fmt.Println("sum:", sum)

	fmt.Println("contains:", strings.Contains("golang", "go"))
	fmt.Println("first non-empty:", firstNonEmpty("", "", "fallback"))
}

预期输出:

text
sum: 10
contains: true
first non-empty: fallback

常见错误与踩坑 ​

  • 注意参数顺序。 切片工具常是 (slice, func);顺序写反能编译但行为不对。
  • 优先用泛型版本。 新版 lancet 已泛型化,老代码可能有按类型分身的函数。
  • 别为一个函数引入整个工具库。 标准库或十行代码往往就够了。
  • 注意分配。 Filter 之类会生成新切片,大输入要基准测试。
  • 读文档确认边界。 空输入、nil 切片与带副作用的闭包行为都有细节。

更新记录 ​

  • 2026-10-14:新增"阅读提示"、完整可运行示例(含预期输出)、常见错误与踩坑清单,以及本更新记录。