Go问答技术文章
-
Go build 标签不生效时,文件名后缀与显式约束需要共同满足。本文用互补实现和 go list 文件归属说明平台后缀、自定义标签、测试文件及显式文件入口的区别。202 收藏 -
Go plugin 无法跨任意构建环境直接复用。本文按错误阶段解释工具链、共享依赖源码、构建参数和动态库差异,给出统一构建、符号加载与成套升级回退的方法。418 收藏 -
Go 项目把 interface API 迁移到泛型时,不能只看代码是否编译。本文用共享测试表、最小泛型约束和并行适配层,比较旧接口与泛型实现的输出、错误、零值和边界行为,帮助你分阶段完成迁移并保持测试等价。423 收藏 -
Go 程序在 arm64 上变慢时,不能只看一组 benchmark 就认定是编译器问题。本文先固定代码、输入和环境,再用 amd64/arm64 对照、同机 Go 工具链对照、CPU profile 和指令集实验,把性能下降归因到业务代码、标准库、运行时或编译器生成代码。231 收藏 -
Go 交叉编译时报找不到系统库,通常不是 GOOS 或 GOARCH 本身写错,而是项目进入了 cgo 路径却没有目标平台的 C 编译器、头文件或链接库。本文按纯 Go 与 cgo 两条边界给出排查和构建方案。445 收藏 -
Go json/v2 迁移不能只替换 import。本文区分工具链升级与语义切换,梳理字段匹配、空值、omitempty 和严格输入风险,给出兼容选项示例及发布回退清单。384 收藏 -
Go 1.22 改变了 for 循环变量的作用域,旧版测试尤其是 t.Parallel 子测试可能从误通过变成真实失败。本文用最小配方解释 go.mod、GOEXPERIMENT=loopvar 与 go vet 的协作方式,帮助你安全完成迁移。266 收藏 -
Go 1.16 将 io/ioutil 的能力分散到 io 和 os。本文按函数职责整理 ReadFile、ReadDir、ReadAll、临时文件等迁移方式,并说明 DirEntry 与 FileInfo 的兼容边界。151 收藏 -
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 收藏