2025-04-03 Go 效率工具:使用 air 热重载 Go 应用程序 在项目开发阶段,热重载技术非常有用,通过热重载,可以实现在无需手动干预的情况下,修改代码文件后,自动重启 Go 应用。这极大的提升了开发体验,同时也节约了我们的开发时间。本文我们一起来体验一下使用 air 热重载 Go 应用程序,提高开发效率。 阅读全文…
2025-03-29 Go 使用 K8s Aggregate 聚合你的错误列表 我在「go-multierror: 更方便的处理你的错误列表」一文中讲解了在 Go 中如何使用 go-multierror 包聚合错误列表,本文将介绍另一种方案,来看看 Kubernetes 是如何聚合错误列表的。 Kubernetes 在 apimachinery 项目中专门提供了 Aggregate 类型来处理聚合错误,我们一起来看下它的使用方法和实现原理。 阅读全文…
2025-03-23 Go go-multierror: 更方便的处理你的错误列表 go-multierror 是一个第三方的 Go 语言库,用于处理多个错误的聚合与管理。它由 HashiCorp 提供,非常适合需要在某些操作中收集多个错误并在最后统一返回的场景。 阅读全文…
2025-03-16 Go 如何使用 go:linkname 指令访问 Go 包中的私有函数 在 Go 语言的包设计中,函数和变量通过首字母大小写来严格区分导出(exported)与未导出(unexported)的可见性规则。这种机制是 Go 模块化设计的基石,但同时也为底层系统级开发带来了限制。//go:linkname 指令正是 Go 为突破这一限制预留的「后门」,它通过编译器的符号重定向能力,允许开发者直接链接任意包的未导出符号——无论是标准库的私有函数,还是第三方包的隐藏变量。 本文就来带大家一起体验下 //go:linkname 指令的魔力。 阅读全文…
2025-03-09 Go 如何基于 Go 语言设计一个简洁优雅的分布式任务系统 在当今云计算与微服务盛行的时代,分布式任务系统已成为支撑大规模业务的核心基础设施。今天就来为大家分享下如何基于 Go 语言从零设计和实现一个架构简洁且扩展性强的分布式任务系统。 阅读全文…
2025-03-02 Go 在 Go 中如何使用分布式锁解决并发问题? 在分布式系统中,协调多个服务实例之间的共享资源访问是一个经典的挑战。传统的单机锁(如 sync.Mutex)无法实现跨进程工作,此时就需要用到分布式锁了。本文将介绍 Go 语言生态中基于 Redis 实现的分布式锁库 redsync,并探讨其使用方法和实现原理。 阅读全文…
2025-02-23 Go 在 Go 中使用 cron 执行定时任务 如果你曾经在 Go 中实现过定时任务,可能会发现,原生的 time.Timer 或 time.Ticker 虽然简单易用,但在复杂的场景下(如多任务调度、时区处理、任务失败重试等)往往显得力不从心。这时,一个功能强大且灵活的定时任务库就显得尤为重要。 github.com/robfig/cron 正是为此而生。它不仅支持标准的 crontab 表达式,还提供了秒级精度、时区设置、任务链(Job Wrappers)等高级功能,能够轻松应对各种复杂的定时任务场景。 阅读全文…
2025-02-16 Go Go 并发编程:如何实现一个并发安全的 map 上周发布的文章「Go 并发控制:sync.Map 详解」有读者反馈说我写的太难了,上来就挑战源码,对新手不够友好。所以这篇文章算作补充,从入门到进阶的顺序讲解一下在 Go 中如何自己实现一个并发安全的 map。 阅读全文…
2025-02-10 Go Go 并发控制:sync.Map 详解 我们知道,Go 中的 map 类型是非并发安全的,所以 Go 就在 sync 包中提供了 map 的并发原语 sync.Map,允许并发操作,本文就带大家详细解读下 sync.Map 的原理。 阅读全文…
2025-02-07 Go 在 Go 中如何将 [][]byte 转为 io.Reader ? 起因:在春节前的某一天,我在 ekit 项目的交流群里看到大明老师发了这样一条消息: 各位大佬,问个小问题,有咩有谁用过 [][]byte 转为 io.Reader 的东西?我以前搞过一次,但是我忘了是我手搓了一个实现,还是用的开源的,还是SDK 自带的 阅读全文…