Go语言技术文章
-
go build -trimpath 会移除可执行文件中的本机目录,但不会删除函数名、行号和调用栈。本文解释 runtime.Caller 如何读取裁剪后的逻辑文件名,并给出生产构建、本地调试与源码版本关联的选择方法。298 收藏 -
Go 嵌入资源读取失败时,不要先手写 ReadFileFS。本文按接口分派、embed.FS 路径、fs.ValidPath、PathError 和自定义实现契约逐层排查。252 收藏 -
Go 私有模块下载出现 404 时,先判断请求落到了公共代理还是企业代理,再用 GOPRIVATE、GONOPROXY 和 GOPROXY 配置正确的下载边界。190 收藏 -
os.File.Sync 适合放在关键文件写入、检查点和原子替换的持久化边界上。本文区分 Write、Sync、Close 与目录项同步,给出错误处理和同步频率的实用判断。203 收藏 -
GOPROXY=direct 只负责让 Go 直接访问版本控制系统,私有模块的认证仍要交给 Git 的 HTTPS 凭据助手或 SSH;本文用一条请求链路说明如何配置和排查。213 收藏 -
用 Go os/exec 分别读取 stdout 与 stderr,掌握 Start、并发消费管道和 Wait 的正确边界,避免输出混合、管道阻塞和误判退出状态。426 收藏 -
go mod verify 检查本地模块缓存是否仍与 go.sum 记录一致,而 go.sum mismatch 是下载或校验阶段发现模块哈希不匹配。本文按校验对象、缓存边界和排查命令拆开说明。350 收藏 -
Go 的 runtime.KeepAlive 不是强制 GC,也不是替代 Close;它用于把对象的最后安全使用点明确到低层调用返回之后,避免终结器过早关闭底层句柄。本文用文件描述符和 cgo 资源说明放置位置、职责边界与生产检查项。393 收藏 -
go.mod 的 replace 指向 ../local-module 时,开发机能编译并不代表发布环境也能找到该目录。本文从模块图和构建上下文解释失败原因,并给出 go.work、本地模块版本和发布前检查清单。499 收藏 -
Go runtime.GC 只能推动一次垃圾回收,不能保证进程 RSS 立刻下降。本文区分对象可达性、运行时堆页和操作系统内存,给出 MemStats、pprof、FreeOSMemory 与 GOMEMLIMIT 的使用边界。187 收藏 -
Go module 的 pseudo-version 中间 14 位是修订创建时间的 UTC 表示,不是 author time。本文拆解基准版本、时间戳和提交哈希,并用 go list -m -json 核对实际依赖。240 收藏 -
Go 服务里记录 panic,关键是把 recover 放进 defer 函数,并用 runtime/debug.Stack 保存当前 goroutine 的调用堆栈,再补上请求标识和恢复边界。183 收藏 -
Go fuzz 失败后会把可复现输入写入 testdata/fuzz 目录。本文说明如何区分 seed corpus 与缓存语料,用 go test 精确重放、理解最小化输入,并把失败文件保留为回归测试。116 收藏 -
Go 的 errors.As 会沿着错误包装链查找匹配类型。本文用自定义错误说明 %w、目标变量和指针层级的正确写法,并给出迁移与回归检查清单。487 收藏 -
Go benchmark 的 allocs/op 偏高时,不要先猜编译器或垃圾回收;从测试夹具、循环内临时值、切片扩容、字符串转换和逃逸边界逐项拆分,才能定位真正的分配来源。322 收藏