Go问答技术文章
-
Go sync.Once.Do 内部函数发生 panic 后不会自动重试;本文用调用计数、recover 和对比表说明 Once、OnceFunc 与显式重试状态机的边界。434 收藏 -
Go encoding/xml 解码 XML 时,前缀只是文档别名。本文用 xml.Name.Space 和 Local 说明如何按命名空间 URI 稳定判断元素,并比较 Token 级解析与结构体标签的适用边界。434 收藏 -
crypto/subtle.ConstantTimeSelect 只接受 0 或 1,并在两个候选整数之间做固定时间选择。本文用 ConstantTimeEq 生成选择值,解释它适合保护什么、不能替代哪些安全边界,以及如何用测试核对结果。433 收藏 -
Go 的 rows.Next 返回 false 不一定代表结果集正常读完,也可能是迭代期间发生了错误。本文用最小可用代码拆开 QueryContext、Scan、Err 和 Close 的判断边界,说明如何避免把超时、驱动错误误判为空结果。433 收藏 -
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 收藏 -
Golang · Go问答 | 2个月前 | channel · sync.Cond · 架构设计 · 并发编程 · Go问答 · Go channel 条件变量 sync.Cond 并发等待 广播唤醒
Go 的 sync.Cond 和 channel 都能让 goroutine 等待,但它们解决的不是同一个问题。本文从库存闸门和批量任务队列两个场景出发,比较条件变量的广播唤醒、channel 的消息传递、锁边界和关闭语义,并给出可运行的最小写法与选型判断。432 收藏 -
用 netip.Prefix.Contains 判断 IPv4、IPv6 网段归属,重点核对地址族、Masked 规范化和边界测试,避免把字符串比较或映射地址混进访问控制。432 收藏 -
Go 测试使用 t.Parallel 后,如果多个子测试复用父测试创建的临时目录、固定文件名或可变对象,就可能互相覆盖。本文解释调度边界,给出 t.TempDir 隔离夹具、识别共享资源和复查修复的实用方法。432 收藏 -
Go 空接口断言失败通常不是值看起来不对,而是动态类型与目标类型不完全一致。本文用 %T、comma-ok、类型 switch 区分值类型、指针类型和 typed nil。432 收藏 -
Go CGO 交叉编译出现 exec gcc not found 时,先确认目标平台、CGO_ENABLED 和 CC,再在目标 C 交叉编译器与关闭 CGO 之间选择,最后用二进制架构检查避免误用主机 gcc。432 收藏