go
已收录文章:86篇
-
Go 里两个 time.Time 看起来显示相同,直接用 == 仍可能比较出不同结果。本文从单调时钟、Location 和时间精度三个边界说明 Equal 与 == 的区别,并给出可验证的比较写法。276 收藏
-
Go 服务如果允许按参数访问远端 URL,真正的风险不只在字符串校验:DNS 解析后的地址、IPv4-mapped IPv6、重定向目标和代理配置都可能改变出站边界。本文用 net/url、netip 和 net/http 写一套可复查的 SSRF 防护骨架,并说明哪些判断必须在连接前和每次重定向时重复。275 收藏
-
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏
-
Go 的 context.AfterFunc 适合在上下文取消后触发清理动作,但 Stop 返回 false 时回调可能已经开始或即将开始。本文用超时清理场景说明回调生命周期、竞态窗口、幂等保护和测试验收边界。258 收藏
-
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏
-
Go 1.27 草案加入泛型方法和更完整的类型推断规则,但接口方法仍不能声明类型参数。本文结合官方草案拆解这项变化解决什么问题、哪些代码值得试验,以及团队如何在正式版本前准备兼容性验证。256 收藏
-
Go defer 会在登记语句执行时先计算普通参数,而闭包里的变量可能等到真正执行时才读取。区分调用时快照和闭包捕获,就能解释循环日志、资源释放和错误记录中的常见偏差。255 收藏
-
Go 的 io/fs.ReadDir 会按文件名排序返回目录项,但底层 ReadDirFile、os.File.ReadDir 和错误场景的行为并不完全一样。本文从一次目录索引顺序错乱的排查开始,拆清排序、部分结果和测试边界。253 收藏
-
Go regexp.FindAllStringIndex 返回的是字节下标,不是字符序号。本文用中文字符串拆开说明下标、切片、Rune 边界和常见误用,给出可直接验证的安全写法。251 收藏
-
Go 1.21 引入的 log/slog 适合结构化日志,但 password、token 和手机号不能直接写入生产日志。本文从一个小型订单服务出发,用 ReplaceAttr 处理嵌套组字段,接入 JSONHandler,并用 bytes.Buffer 验证脱敏结果。247 收藏
-
Go 泛型函数的约束既要表达可接受的类型,也要让调用方看得懂。本文从类型集、接口方法和类型推断三个边界出发,拆解约束设计、编译验证与常见误区。242 收藏
-
用 Go 的 crypto/rand.Text 替换自写随机字符串时,先确认 Go 版本,再处理字符集、长度、错误边界和回归测试,避免把 math/rand 误用于邀请码或令牌。241 收藏