Go问答技术文章
-
Go ldflags 注入版本变量失败,应先核对包级字符串声明和完整符号路径,再检查引号、脚本覆盖与实际产物。给出 main.Version 最小示例和包内变量写法,区分链接期赋值与运行时覆盖。440 收藏 -
Go 程序不要把用户配置目录写死为 $HOME/.config。os.UserConfigDir 会按平台选择配置根目录,但环境变量异常时也会返回错误。本文给出从定位、拼接应用子目录到安全写入配置文件的最小实践。440 收藏 -
net.LookupTXT 返回的是 TXT 记录组成的字符串切片;单条 TXT 记录内部有多个字符串片段时,Go 会把它们拼成一个字符串。生产代码应使用带超时的 Resolver.LookupTXT,并明确保留记录边界、处理错误和限制日志内容。440 收藏 -
解释 Go Testify 的 AssertExpectations 为什么只能证明声明的 mock 期望被满足,不能单独证明调用次数完全正确,并用 Once、Times、AssertNumberOfCalls 和参数匹配清单补齐测试约束。440 收藏 -
Golang · Go问答 | 2个月前 | golang · 数据库 · 工程实践 · database/sql · Go 数据库驱动 database/sql Rows.NextResultSet 多结果集
当一条数据库语句返回多个结果集时,Rows.Next 只会遍历当前结果集,必须配合 NextResultSet 切换到下一组数据。本文用可复现的 database/sql 代码说明遍历顺序、Err 检查和驱动兼容边界。439 收藏 -
os.DirFS 把目录包装成 io/fs.FS,但它不等于 chroot;filepath.Join 只能拼接本地路径,fs.ValidPath 负责校验 FS 名称,符号链接仍可能把访问带出根目录。439 收藏 -
Go 普通 map 不支持并发读写,读、写、删除和遍历必须进入同一个同步边界;本文用并发计数器演示 RWMutex 的封装方式,并说明何时评估 sync.Map。439 收藏 -
解释 Go copy 复制切片时返回数量变少的原因,围绕目标切片长度、容量、make 初始化和 append 选择给出排查与修复方法。439 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
Go archive/tar 读取 unexpected EOF 时,关键是区分正常归档结束与条目数据未读满。本文结合 Header.Size、实际读取字节数和 Next 的边界行为,给出定位截断归档的排查写法。439 收藏 -
Go x/text/search 的 IgnoreCase 不是简单把两边字符串转成小写,而是保留原文并按语言规则完成大小写不敏感匹配。本文从一个小型搜索工具出发,说明它与 ToLower、Loose、Exact 的区别。439 收藏 -
Go x/text/width 的 Widen 处理半角片假名时,半角浊音符号可能变成组合标记。本文说明宽度映射与 NFC 规范化的区别,并给出原文、展示值和比较键的分层写法。439 收藏 -
Go SetDeadline 设置的是连接上的绝对读写期限,不是只作用于下一次调用。本文说明总耗时与空闲超时的区别、方向 API 的选择、超时判断和并发复查方法。438 收藏 -
Go 的 select default 只说明本次 channel 未就绪,不等于任务失败。本文用 pending 状态、指数退避、随机抖动和 context 取消,说明非阻塞收发如何降频重试并避免丢任务。438 收藏 -
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏