Go问答技术文章
-
Go 测试中不要直接清空或复制已使用的 sync.Once。本文解释初始化、panic、并发和复制边界,并给出用实例工厂实现测试隔离的写法。384 收藏 -
用 Go 泛型写切片函数时,S ~[]E 可以兼容原始切片、类型别名和底层类型相同的自定义切片。本文用一个保留返回类型的示例讲清约束、推导和边界。384 收藏 -
解释 Go SectionReader.ReadAt 为什么会同时返回有效数据和 io.EOF,拆解区间边界、偏移换算与 ReaderAt 契约,并给出避免丢失尾部字节的正确判断顺序。384 收藏 -
reflect.Value.Comparable 会按动态类型判断值能否安全比较。本文讲清它与 IsValid、CanInterface、Interface、Equal 的正确组合顺序。384 收藏 -
Golang · Go问答 | 4星期前 | go · TLS · 网络安全 · VerifyConnection Go InsecureSkipVerify x509.Verify TLS证书校验 证书固定
Go 中 InsecureSkipVerify=true 会跳过默认的证书链和主机名校验。若业务必须接管验证,应在 VerifyConnection 中用自定义 RootCAs、中间证书池和 DNSName 调用 x509.Verify,并可追加 SPKI 指纹约束。384 收藏 -
Go json/v2 迁移不能只替换 import。本文区分工具链升级与语义切换,梳理字段匹配、空值、omitempty 和严格输入风险,给出兼容选项示例及发布回退清单。384 收藏 -
Go encoding/json 的 omitempty 不会自动按自定义 IsZero 省略结构体字段。应使用 omitzero,并区分未提供、显式零和有效值;组合标签按空或零任一条件省略。384 收藏 -
Go 1.23 及以上使用 slices.Collect 收集空 iter.Seq 时会得到 nil 切片。本文区分 nil 与非 nil 空切片、interface 包装和 JSON 输出,并给出稳定返回 [] 的处理方式。384 收藏 -
说明Go bitset中Length概念对应Len方法,比较逻辑位长度与Count置位数量,通过小集合状态推导解释扩展、清位、空集合及性能指标的差别。384 收藏 -
Go 的 math/big.Int 表示整数,调用 Quo 时会按整数除法截断,因此 5 除以 2 得到 2。需要保留小数时,应把输入放进 big.Rat,再用 Quo、RatString 或 FloatString 输出。本文同时说明 QuoRem、IsInt、除数为零和负数边界。384 收藏 -
Go 1.27 为 go/types 增加 Hasher 与 HasherIgnoreTags,用于为 Type 提供与 Identical 或 IdenticalIgnoreTags 一致的哈希关系。本文从类型分析缓存键冲突场景出发,说明 Hash、Equal、maphash.Hash 和结构体标签的边界。383 收藏 -
Scanner.Buffer 并不是把 token 变成无限大。Go 扫描长行时还要考虑 max、初始 cap、换行符空间、Buffer 调用时机和自定义 Split,本文给出排查顺序与 Reader 替代方案。383 收藏 -
Golang · Go问答 | 1个月前 | channel · goroutine · pprof · Go问答 · context pprof 有界队列 go goroutine泄漏 无界channel
Go 原生 channel 容量固定,所谓无界 channel 多由中转 goroutine 与无限 slice 构成。本文用 goroutine profile 定位阻塞堆栈,并迁移到有界队列、context 取消与 WaitGroup 退出等待。383 收藏 -
用最小配方修复 iter.Seq2[T,error] 的错误返回链,覆盖数据源、转换适配器、消费端与 Pull2 的常见吞错位置。383 收藏 -
Go 的 sync.RWMutex 在等待写者时会暂时挡住后续 RLock。本文从锁等待、临界区长度、递归读锁和快照设计入手,给出读请求堆积的排查与处理方案。383 收藏