Go问答技术文章
-
Go 项目已经生成 vendor,编译却仍访问模块代理,通常不是 vendor 目录失效,而是 -mod 参数、GOFLAGS、go.mod 版本门槛或 vendor/modules.txt 不一致。本文按检查顺序给出定位和修复方法。433 收藏 -
Go 的 UnmarshalJSON 适合处理 JSON 表示与 Go 类型之间的边界,不应承载数据库、权限或完整业务校验。本文用别名类型、临时结构和错误分层说明如何限定自定义解码责任。433 收藏 -
解释 Go fs.Sub 为什么拒绝包含 .. 的路径,拆解 ValidPath 规则,并比较 embed.FS、os.DirFS、os.Root 的适用边界与排错方法。433 收藏 -
Go 1.27 引入 encoding/json/v2 后,字段匹配、nil 容器、重复键和非法 UTF-8 的默认语义都更严格。本文用最小示例梳理 v1/v2 差异、兼容选项与切换回归清单。433 收藏 -
Go 的 PSSOptions.SaltLength 可选自动最大盐长、等于哈希长度或指定正整数。本文给出推荐场景、跨语言互操作、验证端严格度、FIPS 边界和测试矩阵。433 收藏 -
说明 Go exec.Cmd.WaitDelay 的计时边界、管道继承与 StdoutPipe 调用顺序,给出超时和 ErrWaitDelay 的区分处理方案。433 收藏 -
Go CGO 交叉编译出现 exec gcc not found 时,先确认目标平台、CGO_ENABLED 和 CC,再在目标 C 交叉编译器与关闭 CGO 之间选择,最后用二进制架构检查避免误用主机 gcc。432 收藏 -
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
Go 结构体含 sync.Mutex 时,值接收者、参数传递、range 和 map 取值都可能复制锁。本文对比指针语义、快照边界与 go vet copylocks 的审查方法。431 收藏 -
Go sql.DB.BeginTx 会用传入的 context 管理整个事务生命周期。上下文取消后 database/sql 会回滚事务,Commit 返回错误。本文区分事务上下文、语句上下文与安全收尾写法。431 收藏 -
os.DirFS 只保证交给操作系统的路径带有指定前缀,根目录内的符号链接仍可能指向外部。本文用最小项目说明成因,并给出 Go 1.24+ 的 os.Root.FS 改写方案。431 收藏 -
Go HTTP Trailer 位于消息体之后,字段名必须在首部提交前声明,本文用服务端响应和客户端请求示例说明正确时序、分块传输条件与常见排查方法。431 收藏 -
竞态修复后吞吐下降不一定是锁竞争。本文用 mutex profile、block profile 和固定基线,判断新增临界区是否真正造成吞吐损失。430 收藏 -
fs.Sub 不会改写原始 embed.FS,也不会修改 HTTP 路由。本文区分嵌入路径、子文件系统相对路径和 URL 前缀,解决读取与遍历时目录前缀重复的问题。430 收藏 -
Go 的 BuildInfo.Settings 是按实际构建条件写入的稀疏键值列表,VCS 字段会因关闭 buildvcs、缺少仓库或工具、模块与仓库目录不匹配等情况而缺失。本文给出判断方法与容错读取代码。430 收藏