Go语言技术文章
-
Go toolchain 自动下载失败时,可以根据项目是否允许升级,选择 GOTOOLCHAIN=local 或 go1.x.y+path 固定本地工具链,并检查 go.mod、go.work 与 PATH 中的版本关系。103 收藏 -
Go 依赖升级后出现接口不兼容,先不要盲目回退。本文用 go.mod、go list -m、go mod graph 和编译错误把问题分成导入路径变化、公开 API 断裂与间接依赖切换三类,再给出回退、迁移和兼容适配的选择方法。176 收藏 -
Go 二进制在 Alpine 启动失败时,应读取 ELF 架构、解释器和动态库需求,区分平台错误与 glibc/musl 不匹配。本文给出 readelf 排查命令,以及纯 Go 构建、musl 重编译和 glibc 运行环境的选择边界。374 收藏 -
Go 程序在本地和容器中出现时区差异,通常不是 Format 的问题,而是 time.Local、TZ 环境变量与 IANA 时区数据来源不同。本文给出 UTC 存储、显式 Location 展示和容器缺少时区数据库时的兼容方案。272 收藏 -
Go 日志在容器里延迟出现,通常不是一个笼统的“Go 有缓冲”问题。本文沿着 log/slog 的 handler、stdout/stderr、容器日志流和采集器批量策略逐段定位,并给出不增加无谓缓冲的修复方式。243 收藏 -
Go http.Server 的 MaxHeaderBytes 只限制解析请求行和请求头的读取范围,不限制请求体。本文从自定义 Server 是否生效、前置代理边界和 MaxBytesReader 三个层面说明为什么看起来仍能收到大请求。364 收藏 -
Go 收到信号后仍不退出,要区分通知送达、工作取消与 main 生命周期。本文说明缓冲信号通道、NotifyContext、stop、完成回执及有界等待,给出 Linux/macOS 的完整示例并明确超时退出的清理代价。154 收藏 -
Go 服务健康检查失败而业务接口仍能访问,通常不是业务处理器坏了,而是探针路径、监听地址、状态码或依赖检查边界没有分开。本文用一个最小 net/http 服务拆开存活、就绪和业务依赖检查,并给出按现象定位与部署验收的方法。349 收藏 -
Go HTTP 客户端重试 POST 时,超时只说明客户端没有拿到结果,并不能证明服务端没有处理。本文从请求体、方法语义、幂等键和响应体关闭四个方面,给出一套可控的重试写法。427 收藏 -
Go crypto/tls 的 InsecureSkipVerify 会同时跳过证书链和主机名校验。本文说明它的中间人风险,并给出 RootCAs 与 VerifyConnection 的安全替代方案。452 收藏 -
time.Duration 本质是纳秒整数,String 会按可读性自动选择小时、分钟、秒、毫秒、微秒或纳秒,并保留负值符号。本文用典型场景解释这些输出为什么不同,以及接口需要固定格式时怎么处理。339 收藏 -
Go 使用 archive/tar 解包时,权限差异常常不是 Header.Mode 丢失,而是创建权限受到 umask 影响或目录没有显式 Chmod。本文按普通文件、目录和特殊条目拆开处理,给出一套可复用的还原思路。200 收藏 -
说明 Go gzip.Writer.Close 为什么不能省略:它会完成压缩状态并写出 gzip 尾部信息。文章给出正确的 defer 关闭顺序,区分 Flush 与 Close,并整理读取不完整、底层关闭失败等排查边界。374 收藏 -
Go text/template 执行成功但页面为空,通常不是 Execute 没运行,而是写入目标、模板入口、数据字段或空值分支出了偏差。本文给出从输出长度到 ExecuteTemplate 的排查顺序。197 收藏 -
bufio.Writer 写入成功不代表数据已提交给文件。本文说明关闭前 Flush 的正确位置、写入与关闭错误的保留方法,以及 Flush 和 Sync 的区别,给出不覆盖已有文件的报表写入示例。430 收藏