Go语言技术文章
-
用 Go log/slog 的 WithGroup 组织嵌套字段,解释 Handler 链路、同名键边界与 JSON 输出检查方法。341 收藏 -
Go regexp 的 FindAllString 适合一次拿到全部匹配,但重复匹配、空匹配和 n 参数经常让结果数量出乎意料。本文用可运行示例拆解扫描游标与边界,并给出限制匹配次数的可靠写法。147 收藏 -
Go 使用 io.CopyN 复制固定长度数据时,源数据不足会返回已复制字节数和 EOF。本文用可复现的小例子拆开短读、剩余字节与错误判断,并说明什么时候应该改用 io.ReadFull。267 收藏 -
strings.SplitAfterSeq 返回惰性序列,适合逐段读取并保留分隔符。本文用一个可运行示例说明遍历时的调用链、空输入边界和与 SplitAfter 的取舍。127 收藏 -
Go 的 runtime.SetFinalizer 可以在对象不再可达时安排回调,但它不是文件、连接或临时目录的确定性关闭机制。本文用 runtime.KeepAlive、SetFinalizer 和显式 Close 对比验证可达性、回收时机与资源释放边界。161 收藏 -
URL.Redacted 会复制 URL 并把 User.Username 与密码替换成占位符,适合记录请求地址,但不能代替完整日志脱敏。本文用 Go 代码说明调用链、凭据边界和常见误区。261 收藏 -
sort.Search 找不到目标时返回 len 并不是越界,而是把第一个满足条件的位置定义为插入点。本文用单调谓词、边界表和可运行代码说明闭区间、找不到与插入位置的关系。411 收藏 -
Go 处理用户上传目录或解压目录时,os.Root 可以把文件访问限制在一个根目录内。本文从 Open、ReadFile 和相对路径校验入手,说明目录沙箱如何工作、哪些错误必须保留,以及如何验证越界路径不会被打开。483 收藏 -
context.WithoutCancel 会保留父 Context 的值,但切断取消、截止时间和 Err 传播。本文用请求收尾场景说明它的适用边界、调用链写法和超时风险,避免把它当成无限期后台执行开关。345 收藏 -
io.SectionReader 把底层 ReaderAt 限制在一段区间内,ReadAt 每次按给定偏移读取且不共享当前位置。本文用短代码拆开偏移换算、边界错误和并发复用条件。492 收藏 -
Go 的 subtle.ConstantTimeCompare 不只是在比较字节内容,输入长度不同也会直接影响结果。本文用可运行示例说明长度边界、常量时间语义和密钥校验中的正确写法。103 收藏 -
bytes.Reader.Seek 的负位置不是普通读取失败,而是偏移计算越过了起点。本文用可运行示例拆开 whence、offset、返回位置和错误处理边界,并说明为什么不能继续读取。435 收藏 -
sync.Map.LoadOrStore 会根据键是否已经存在,在并发初始化时返回新值或旧值。本文用一个可运行的缓存初始化例子拆开 loaded、类型断言和重复构造的边界。120 收藏 -
Go 的 os.File.ReadAt 适合多个 goroutine 按独立偏移量并发读取同一个文件,但每次调用仍要检查 n 和 err,尤其要正确处理 n < len(buf) 的短读与 io.EOF。152 收藏 -
Golang · Go问答 | 2天前 | 并发 · 定时器 · go · 竞态 · time.AfterFunc · 定时器 Go 竞态 Timer.Reset Timer.Stop time.AfterFunc
time.AfterFunc 返回的 Timer 既可能尚未触发,也可能已经进入回调。本文用 Stop、Reset 和回调状态拆解竞态边界,给出可验证的防重复调度写法。461 收藏