如何在 Debian 中优化 Golang 内存管理
在 Debian 上优化 Go 内存管理,重点不在单点“调参”,而在先定位热点、再按场景收紧 GC 与分配策略。本文从环境变量、pprof、数据结构复用、GC 观察和监控落地几个层面,整理出一套更适合生产环境的实操路径。
在 Debian 上优化 Go 内存管理,重点不在单点“调参”,而在先定位热点、再按场景收紧 GC 与分配策略。本文从环境变量、pprof、数据结构复用、GC 观察和监控落地几个层面,整理出一套更适合生产环境的实操路径。

Go 1.18 引入泛型后,开发者终于不用在“重复写同类代码”和“用 interface{} 换灵活性”之间做取舍。本文从概念、基本写法、常见场景到使用边界梳理 Go 泛型,帮助你判断它何时值得上、何时不必强用。

Go 程序发布后,常见需求之一就是让可执行文件直接输出版本号。与其在代码里手动改常量,不如在构建阶段通过 `go build -ldflags` 注入版本变量,既省去改源码的步骤,也更适合发布流程和自动化打包。

Go 的时间格式化不靠 `yyyy-MM-dd` 这类占位符,而是直接用参考时间 `Mon Jan 2 15:04:05 MST 2006`。这让格式写法很直观,但也意味着一旦数字写错,`Format` 依然会照常输出,结果往往比报错更难排查。 在 Go 项目里,时间格式化常常看起来只是一个小细节,但它恰好是最容易把线上数据悄悄写坏的地方。

路径穿越一直是文件上传、下载和静态资源处理里的高风险问题。Go 1.24 新增的 os.Root 把目录边界控制下沉到系统调用层,能同时应对 ../ 逃逸、符号链接绕过和 TOCTOU 风险。本文结合原理与示例,梳理它在实际服务中的用法和适用边界。

这篇文章用一个单文件 Go 示例,梳理了在 CentOS 中通过 `go build` 编译程序、使用 `nohup ./main &` 放到后台运行,以及借助 `tail` 查看日志的完整流程。文中也补充了 `nohup.out` 的作用和不适合交互式程序这一前提。 在 CentOS 服务器上跑 Go 程序时,很多人真正关心的不是“能不能启动”,而是退出终端、断开 SSH 之后进程会不会跟着停掉。

Go 里的 `sort.Slice` 默认不保证稳定性,因此当比较结果相等时,元素原有先后顺序可能被打乱。本文结合实际踩坑案例,说明稳定排序与非稳定排序的区别、`sort.Slice` 背后的原因,以及什么时候该改用 `sort.SliceStable`。

Go 1.26 为 reflect.Type 和 reflect.Value 新增了 Fields 方法,把结构体字段遍历从“按索引取值”改成了更直接的迭代写法。它解决的是可读性和组织方式问题,不改变反射原有的可设置性、导出规则、嵌入字段处理方式,也不默认带来性能提升。

这篇文章整理了在 CentOS 上用 Golang 连接 MySQL 和 PostgreSQL 的最小可行流程,包括 Go 安装、驱动获取、连接代码示例和运行验证方法。文中保留了原始命令与示例代码,并补充了连接串字段、端口和常见排查点,方便直接照着落地。

Go 1.23 新增的 os.CopyFS,把“复制整个目录”带进了标准库。它适合替代很多基础场景下的第三方方案,但也有不覆盖已有文件、不处理符号链接等明确边界。本文结合签名、示例、实现思路和选型对比,帮你判断它是否适合当前项目。

Go 字符串当然能比较,但“能用”和“用对”不是一回事。本文从运算符、`strings.Compare()`、`strings.EqualFold()` 三种常见写法出发,解释 Go 按字节进行字典序比较的规则、性能上的快速路径,以及编码和空字符串这两个最容易踩坑的地方。

Go 编译器报出“is a program, not an importable package”时,问题不在导出符号,而在于目标包本身是 `package main`。这篇文章从编译模型、导入边界、测试例外和工程重构四个角度说明原因,并给出更适合复用代码的 Go 项目组织方式。
