Go语言技术文章
-
用 Go 的 math/rand/v2 处理切片随机化:用 Shuffle 原地打乱,用 Perm 生成不重复下标抽样,并说明数量边界、原切片副作用与安全随机数的选择。106 收藏 -
GOPROXY=off 只禁止新的模块源通信,不会自动扫描兄弟目录。本文区分主模块、go.work/replace、本地模块缓存和 sumdb 校验链,按错误信息给出离线构建的排查与修复方法。106 收藏 -
Go database/sql 的 sql.Stmt 可以在重复 SQL 中复用。本文按 DB、事务和局部函数三种边界说明 PrepareContext、StmtContext 与 Close 的正确放置,避开反复 Prepare 和资源迟迟不释放。106 收藏 -
讲清 Go sql.Tx 回滚失败时如何保留原始业务错误,使用 errors.Join 组合异常,并区分 ErrTxDone 与 Commit 失败。106 收藏 -
Go flag.VisitAll 会按参数名字典序遍历全部参数,这个确定性顺序不等于用户帮助的阅读顺序。本文解释 VisitAll、Visit 的边界,并给出收集参数后按显式规则生成稳定帮助文档的方法。106 收藏 -
围绕 Go encoding/xml 的 Decoder.Strict,说明如何隔离宽松解析、配置 AutoClose 与 Entity,并在容错后继续校验 XML 结构和业务字段。106 收藏 -
说明 Go net 连接 IPv6 链路本地地址时的 zone、方括号、tcp6、JoinHostPort 和 DialContext 参数边界。106 收藏 -
Go 的 sync.Cond 适合让 goroutine 等待一个由共享状态表达的条件。本文用一个有界任务队列拆开 Wait、Signal 与 Broadcast 的正确顺序,并补上退出、空队列和误唤醒后的核对方法。105 收藏 -
Go 里接口自身为 nil 与接口持有 typed nil 不是一回事,reflect.ValueOf(nil) 还会得到无效 Value。本文给出带 IsValid 和 Kind 防护的安全判断函数,避免反射判断直接 panic。105 收藏 -
Go encoding/csv 的 Comment 只识别没有前导空白的物理行首。引号字段中的 # 属于字段值,不会被当成注释;本文用代码和边界表说明三种情况的区别。105 收藏 -
Go 泛型出现 cannot infer type 时,先判断类型参数是否出现在普通实参中,再用显式类型参数或调整函数签名完成修复。105 收藏 -
Go 的 channel range 只有在通道关闭后才会退出。本文从单发送者、多发送者和接收端提前退出三个场景说明 close 的责任边界,避免 range 卡住与 send on closed channel。105 收藏 -
Go net.Resolver.LookupIP 取消后,标准库不会把半截地址列表作为成功结果返回。本文解释 Context 取消、并发共享查找、旧切片复用和错误判断之间的关系,并给出安全的地址缓存与排查写法。105 收藏 -
Go sync.Cond 的关键不是把 Signal 换成 Broadcast,而是让等待条件、互斥锁和唤醒范围保持一致。本文从有界队列场景出发,拆解 Wait 的循环写法、Signal 与 Broadcast 的选择、丢唤醒风险和可验证的测试边界。104 收藏 -
Go 客户端连续调用登录接口和业务接口时,应复用同一个配置了 cookiejar.Jar 的 http.Client。本文说明 Cookie 的域名、路径、协议和过期边界,并给出公共后缀列表、多账号隔离与内存持久化注意事项。104 收藏