Funk是一个全面的Go实用程序库,提供增强的错误处理、结果类型、功能标志和各种辅助函数,以简化Go开发。
- 带堆栈跟踪的丰富错误包装
- 与gRPC状态代码兼容的错误代码
- 详细的错误上下文和元数据
- Panic恢复机制
- 函数式编程启发的结果和错误类型
- 无需显式nil检查的安全错误处理
- 用于映射、过滤和转换结果的综合API
- 支持Future类型的异步操作
- 运行时动态配置
- 环境变量集成
- CLI标志生成
- 类型安全的功能访问
- 基于YAML的配置和环境变量替换
- 支持配置合并和扩展
- 用于动态配置值的表达式引擎(类似GitHub Actions工作流语法)
- 热重载功能
- 基于zerolog的高性能日志记录
- 带自动字段注入的上下文感知日志
- 带堆栈跟踪的错误详细信息捕获
- 支持命名空间的模块化日志记录器
- 标准化环境变量访问
- 类型安全的环境变量检索
- .env文件加载和解析
- 环境变量扩展
- 运行时堆栈跟踪捕获
- 调用者识别和元数据提取
- 性能优化的堆栈操作
- 深度Go运行时集成
- 用于切片、映射和比较的通用辅助函数
- 断言实用程序
- 路径和文件实用程序
- 字符串和格式化助手
- 在同一个端口上同时提供 gRPC / HTTP/1 / HTTP/2(通过连接 sniff)
- 包:
connmux(见connmux/README.md)
go get github.com/pubgo/funk/v2import "github.com/pubgo/funk/v2/errors"
err := errors.New("出现问题", errors.Tags{"component": "database"})
err = errors.Wrap(err, "连接失败")
errors.DebugPrint(err)import "github.com/pubgo/funk/v2/result"
// 创建成功结果
res := result.OK(42)
// 创建失败结果
errRes := result.Fail[int](errors.New("计算失败"))
// 安全解包值
if value, ok := res.TryUnwrap(); ok {
fmt.Printf("获得值: %d\n", value)
}
// 链式操作
result := result.OK(10).
Map(func(x int) int { return x * 2 }).
FlatMap(func(x int) result.Result[int] {
if x > 0 {
return result.OK(x + 1)
}
return result.Fail[int](errors.New("负值"))
})import "github.com/pubgo/funk/v2/features"
// 定义功能标志
var debugMode = features.Bool("debug", false, "启用调试模式")
// 使用功能标志
if debugMode.Value() {
log.Println("调试模式已启用")
}import "github.com/pubgo/funk/v2/config"
type Config struct {
Server struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
} `yaml:"server"`
}
cfg := config.Load[Config]()
fmt.Printf("服务器将在 %s:%d 上运行\n", cfg.T.Server.Host, cfg.T.Server.Port)import "github.com/pubgo/funk/v2/log"
logger := log.GetLogger("myapp")
logger.Info().Msg("应用程序已启动")
logger.Err(someError).Msg("发生错误")import "github.com/pubgo/funk/v2/env"
// 获取环境变量带默认值
host := env.GetOr("SERVER_HOST", "localhost")
// 类型安全的环境变量访问
port := env.GetInt("SERVER_PORT", "PORT")
debug := env.GetBool("DEBUG")import "github.com/pubgo/funk/v2/stack"
// 捕获当前堆栈跟踪
frames := stack.Trace()
// 获取调用者信息
caller := stack.Caller(0)
fmt.Printf("被调用于: %s:%d\n", caller.File, caller.Line)- errors: 带包装、堆栈跟踪和元数据的增强错误处理
- result: 用于更安全错误处理的函数式结果和错误类型
- features: 用于运行时配置的功能标志系统
- assert: 用于测试和验证的断言实用程序
- config: 支持多种来源的配置管理
- log: 增强的日志记录功能
- env: 环境变量管理
- stack: 堆栈跟踪分析和调用者识别
有关详细文档,请访问:
欢迎贡献!在提交拉取请求之前,请阅读我们的贡献指南。
MIT