Go问答技术文章
-
Go 返回接口值时,typed nil 会让接口看起来非 nil。本文用接口动态类型和值的关系,说明如何修正接口返回、error 成功分支和调用方复查。413 收藏 -
Go 的 io.ByteScanner.UnreadByte 不是通用回退栈:它只约定回退最近一次成功的 ReadByte。本文用 token 读取示例说明连续回退、其他读取操作和 EOF 后的状态边界。412 收藏 -
Go build tags 没生效时,先用 go list 看文件是否进入 GoFiles,再分别检查 //go:build 的位置、表达式逻辑、文件名后缀和 -tags 参数。本文给出一套不依赖猜测的排查顺序。412 收藏 -
Go 编译缓存变大时,先用 go env 找到 GOCACHE 和 GOMODCACHE,再按构建、测试、模块下载和 fuzz 缓存分别选择 go clean 参数,避免误删依赖源码。412 收藏 -
FileHeader.Filename 是客户端提交的展示元数据,即使 Go 做了基础名处理,也不应直接决定服务器路径。本文用随机存储名、扩展名白名单和受控目录完成安全保存。412 收藏 -
Go net.Conn 的 Deadline 是持续生效的绝对时间,不是下一次读写的等待时长。本文区分总截止时间与空闲超时,并给出读写分离、滑动刷新、清除 deadline 和超时错误判断方法。412 收藏 -
sort.Search 找不到目标时返回 len 并不是越界,而是把第一个满足条件的位置定义为插入点。本文用单调谓词、边界表和可运行代码说明闭区间、找不到与插入位置的关系。411 收藏 -
解析 go test -json 时,关键不是逐行打印 JSON,而是按 Package 和 Test 保存事件流,再依据 Action 还原测试状态与输出。本文给出字段边界、并行处理和常见坑。411 收藏 -
go generate 找不到生成器时,问题通常是 GOBIN 没进入 PATH。本文比较 Go 1.24+ 的 tool/go tool、仓库相对路径和带版本 go run,给出本机与 CI 都能复现的固定方式。411 收藏 -
通过 Go runtime/pprof 的 block Profile 记录同步阻塞累计时间,再用 go tool pprof 的 top、list 和调用图定位锁、channel 与 WaitGroup 的等待点。411 收藏 -
解释 Go API 中 nil slice 与空 slice 的 JSON 差异,给出响应边界归一化、omitempty 边界和 encoding/json v1/v2 迁移测试方案。411 收藏 -
sync.Cond 的难点不是调用 Broadcast,而是让共享状态、锁和等待条件保持同一条时间线。本文用一个任务队列场景拆解 Wait、Signal、Broadcast 的正确顺序、常见误区与可验证写法。410 收藏 -
Go 写文件时,os.File.Sync 成功并不等于包含它的目录项也完成持久化。本文用临时文件、重命名和目录同步的完整流程,说明崩溃恢复时该看哪些边界。410 收藏 -
Go 的 json omitempty 不会按传统规则省略结构体值字段。本文用最小示例说明值字段、指针字段和未提供状态的区别。409 收藏 -
解释 Go testing.T.Parallel 为什么要等父测试函数返回,拆解 t.Run、并行栅栏、共享资源和调试检查方法。409 收藏