Go语言技术文章
-
Go 编译缓存变大时,先用 go env 找到 GOCACHE 和 GOMODCACHE,再按构建、测试、模块下载和 fuzz 缓存分别选择 go clean 参数,避免误删依赖源码。412 收藏 -
Go env -w 会把设置保存为用户级 Go 环境默认值,而命令前的 NAME=VALUE 只影响当前进程。本文用 GOPROXY、GOENV 和 go env -u 说明优先级、适用场景与清理方法。412 收藏 -
FileHeader.Filename 是客户端提交的展示元数据,即使 Go 做了基础名处理,也不应直接决定服务器路径。本文用随机存储名、扩展名白名单和受控目录完成安全保存。412 收藏 -
filepath.Rel 会按当前操作系统的分隔符、绝对路径和卷名规则计算词法相对路径。本文给出可复用封装,说明不同盘符、绝对与相对混用、ToSlash、符号链接及安全边界,并用表驱动测试验证。412 收藏 -
Go net.Conn 的 Deadline 是持续生效的绝对时间,不是下一次读写的等待时长。本文区分总截止时间与空闲超时,并给出读写分离、滑动刷新、清除 deadline 和超时错误判断方法。412 收藏 -
sort.Search 找不到目标时返回 len 并不是越界,而是把第一个满足条件的位置定义为插入点。本文用单调谓词、边界表和可运行代码说明闭区间、找不到与插入位置的关系。411 收藏 -
讲清 os.File.Truncate 改短文件时的文件长度、当前偏移量和落盘检查,给出可复现的配置文件更新写法。411 收藏 -
用 Go json.Decoder 读取连续 JSON 对象时,区分正常 io.EOF、语法损坏、截断输入和类型错误,并用 RawMessage 处理多态载荷。411 收藏 -
解析 go test -json 时,关键不是逐行打印 JSON,而是按 Package 和 Test 保存事件流,再依据 Action 还原测试状态与输出。本文给出字段边界、并行处理和常见坑。411 收藏 -
go generate 找不到生成器时,问题通常是 GOBIN 没进入 PATH。本文比较 Go 1.24+ 的 tool/go tool、仓库相对路径和带版本 go run,给出本机与 CI 都能复现的固定方式。411 收藏 -
讲清 Go testing.B.ReportMetric 的参数、单位、b.N 归一化、b.Elapsed 计时指标、并行基准汇总和内置指标覆盖边界,配合可直接改写的 Go 示例记录自定义 benchmark 指标。411 收藏 -
通过 Go runtime/pprof 的 block Profile 记录同步阻塞累计时间,再用 go tool pprof 的 top、list 和调用图定位锁、channel 与 WaitGroup 的等待点。411 收藏 -
Go 使用 json.Decoder.Token 可以按对象边界逐项读取 JSON。本文给出带深度上限的递归实现,说明数组、标量、EOF、语法错误和资源边界。411 收藏 -
解释 Go API 中 nil slice 与空 slice 的 JSON 差异,给出响应边界归一化、omitempty 边界和 encoding/json v1/v2 迁移测试方案。411 收藏 -
sync.Cond 的难点不是调用 Broadcast,而是让共享状态、锁和等待条件保持同一条时间线。本文用一个任务队列场景拆解 Wait、Signal、Broadcast 的正确顺序、常见误区与可验证写法。410 收藏