Go语言技术文章
-
Go MultiWriter 在同次 Write 遇错时会停止后续目标。本文用双输出改造示例区分前置副作用、外层重复调用和缓冲延迟错误,并说明 Flush 与重试边界。310 收藏 -
Go 1.22 改变了 for 循环变量的作用域。本文从 go.mod、闭包捕获和 GOEXPERIMENT=loopvar 三个线索判断代码使用的是新语义还是旧语义,并说明何时仍需显式传参。310 收藏 -
Go 的 context.WithCancelCause 能让调用方同时看到 context.Canceled 和真正的取消根因。本文用一个请求链示例拆解取消传播、Cause 读取、父子上下文竞速与错误包装边界。309 收藏 -
Go 复用 time.Timer 时,Reset 的调用时机、旧值处理和 Go 版本语义容易混在一起。本文用一个超时循环拆开 stopped、expired、drain 与 1.23 之后的行为边界。309 收藏 -
Golang · Go问答 | 2个月前 | 标准库 · golang · HTTP · url · Go问答 · Go path net/url RawPath url.URL.JoinPath URL转义
Go 的 url.URL.JoinPath 会清理路径片段,但不会替你判断斜杠是分隔符还是数据。本文用 Path、RawPath 和 PathEscape 对比说明 URL 拼接与转义的边界。309 收藏 -
用 Go 逐行解析简单配置文本:统一换行,跳过空行和整行注释,用 strings.Cut 保留值中的等号,并为格式错误与重复键返回行号。309 收藏 -
Go nil 接收者调用方法不一定会 panic,关键要区分 nil 指针、nil 接口以及方法体是否发生字段解引用。本文用最小示例和检查表定位真实的 panic 边界。309 收藏 -
Go bufio.Writer 的 Available 返回当前内部缓冲还剩多少字节。本文用 Size、Buffered 和 Available 的关系设计批量写入,说明容量不足、超大记录、AvailableBuffer 以及 Flush 错误检查的处理方式。309 收藏 -
Go time.Ticker 只负责按周期发送时间信号,不会自动结束 goroutine。本文用 context、select 和 WaitGroup 实现可停止的周期任务,并说明 Stop 不关闭通道、慢任务丢 tick 和 Reset 的边界。309 收藏 -
用Go x509.VerifyOptions校验证书时,Roots、Intermediates和DNSName分别承担什么职责?本文给出CertPool组装方法、常见错误排查顺序和吊销检查边界。309 收藏 -
Go errors.Join 会生成实现 Unwrap() []error 的多分支错误树。errors.Is 会检查根错误并深度优先遍历每个子错误,因此可对多个原因逐个匹配;直接等号和 errors.Unwrap 不适用于该结构。309 收藏 -
Go testing.T.Cleanup 会在测试及其子测试完成后执行已注册回调,并按后注册先执行的顺序收尾。本文用资源依赖和子测试作用域说明怎样安排注册顺序,避免测试夹具提前失效。309 收藏 -
用 Go 的 os.ReadFile 读取配置文件时,不要比较错误字符串。本文用 errors.Is 和 errors.As 区分权限不足、路径不存在与其他失败,并通过 %w 保留可追踪的错误链。309 收藏 -
Go modules 的 vendor 模式能把构建所需依赖放进项目目录,但可复现的关键不是简单提交 vendor,而是让 go.mod、vendor/modules.txt 与构建模式保持一致。本文梳理 go mod vendor、-mod=vendor 和团队协作中的固定检查点。309 收藏 -
Go 使用 slices.SortStableFunc 并让相同排序键返回 0,可以保留本次输入中等价记录的相对次序。本文区分批内稳定性与跨请求确定性,说明切片复制、分片收集和次级键的取舍。309 收藏