Go语言技术文章
-
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 收藏 -
Golang · Go问答 | 2天前 | 超时 · go · 外部命令 · 进程管理 · CommandContext · wait 子进程 进程超时 Go外部命令 CommandContext 命令启动
CommandContext 超时并不等于所有子进程都已退出。本文用可运行示例拆解 Start、Process、Wait 与子进程继承关系,给出可核对的超时收尾写法。287 收藏 -
用 Go 的 weak.Pointer 做一个不会长期抓住对象的弱缓存,解释 runtime.KeepAlive、Load 与 GC 回收之间的边界,并给出可复现的并发读取写法。229 收藏 -
Golang · Go问答 | 2天前 | 字符串 · 内存 · go · 性能 · strings.Builder · 字符串拼接 reset() String() 内存复用 go strings.Builder WriteString
strings.Builder 适合顺序拼接字符串,但 String() 返回值与 Builder 的后续写入、Reset() 复用之间有明确边界。本文用可运行实验说明结果何时可以长期保存,以及为什么不能复制 Builder。297 收藏 -
Go slices.BinarySearch 返回的索引即使找不到元素也有意义:先保证切片有序,再用 found 判断命中,并把索引作为插入位置或下界使用。194 收藏 -
用 Go 的 net/http.ServeContent 搭一个可验证的文件下载接口,拆清 Range、If-Modified-Since 与 Last-Modified 的判断边界。125 收藏 -
用 Go filepath.IsLocal 先拦截绝对路径和 .. 路径,再配合 Join 与符号链接复核,建立文件下载场景的安全边界。479 收藏 -
Go 1.21 引入的 slices.Clip 可以把切片容量收紧到长度,适合在保留小结果、释放大底层数组引用时使用。本文用可运行示例说明它的边界。221 收藏 -
Go 1.23 引入的 slices.Collect 能把 iter.Seq 收集成新切片,但它和手写 append 解决的问题并不完全相同。本文用真实代码比较两条批量转换路径,说明可读性、容量控制、空序列和性能验证边界。455 收藏