Go问答技术文章
-
Golang · Go问答 | 2个月前 | 标准库 · golang · 性能 · 字符串处理 · reset strings.Builder bytes.Buffer Go字符串拼接 Go字节缓冲
bytes.Buffer 和 strings.Builder 都能减少反复拼接带来的分配,但它们服务的结果类型不同。本文用日志行拼接、HTTP响应和复用场景对比 Write、WriteString、String、Bytes 与 Reset 的边界,给出可落地的选择规则。150 收藏 -
strings.Cut 把字符串拆分成 before、after 和 found 三个结果,适合处理带前缀的配置、路由和协议字段。本文用可运行示例说明空字符串边界、与 HasPrefix 的分工,以及从 Index 写法迁移时的验收方式。305 收藏 -
用 Go 标准库 log/slog 的 Handler.WithGroup 组织请求、用户和数据库字段,比较文本与 JSON 输出,并验证自定义 Handler 的实现边界。485 收藏 -
通过 Go 的 os.LookupEnv 与 os.Getenv 示例,说明空字符串和未设置的区别,并给出配置回退、必填校验与测试隔离的实用写法。381 收藏 -
解释 Go http.Request.GetBody 的生成条件,区分可重读请求与流式请求,并给出重试、内存控制和上传场景的检查方法。431 收藏 -
解释 Go context 取消后 goroutine 仍可能继续工作的原因,给出 select 监听、资源释放、退出确认和可复现检查方法。389 收藏 -
用 Go 的 http.Server.ConnState 观察连接从建立、活跃、空闲到关闭的状态变化,并结合超时和异常断开日志定位连接问题。425 收藏 -
Golang · Go问答 | 2个月前 | 并发 · 错误处理 · Context · Go问答 · Go 错误日志 超时 context.WithCancelCause context.Cause 取消原因
只记录 context.Err() 时,Go 服务通常只能看到 context canceled 或 deadline exceeded,无法判断是上游主动取消、下游超时还是业务熔断。本文用 context.WithCancelCause 和 context.Cause 传递可诊断的取消原因,并说明父子 Context、超时边界与日志落点。191 收藏 -
用一个可运行的 Go 示例拆开 reflect.Value 的 CanSet、CanInterface 和 MethodByName 边界,说明什么时候会 panic,以及如何在反射入口先做类型、有效性和可导出性检查。407 收藏 -
Go 1.21 引入的 clear 可以把切片元素重置为类型零值,尤其适合切断指针切片和含引用字段的对象链。本文从数组范围、别名切片和旧工具链兼容三个边界说明它怎么用、哪里容易清错。213 收藏 -
解释 Go runtime.SetFinalizer 为什么不是可靠的资源释放器,结合对象可达性、GC 时机、终结器链和 Close 设计给出可验证的使用边界。362 收藏 -
Go 1.25 新增的 sync.WaitGroup.Go 把 goroutine 启动与计数绑定起来。本文用批量任务示例讲清启动时序、Wait 边界、panic 约束和异常收口方式。434 收藏 -
Go 的 sync.Cond 适合让 goroutine 等待一个由共享状态表达的条件。本文用一个有界任务队列拆开 Wait、Signal 与 Broadcast 的正确顺序,并补上退出、空队列和误唤醒后的核对方法。105 收藏 -
Go 的 slog.LevelVar 适合把日志级别做成可热更新的开关。本文从 Handler 如何读取级别讲起,给出并发修改、配置回滚和测试验证的最小写法。364 收藏 -
Go 服务把租户路径和用户输入拼成下载链接时,url.JoinPath 会清理 ./ 与 ../,却不会替你确认用户是否越过了业务根目录。本文用最小示例拆开 PathEscape、JoinPath 和边界校验的职责。127 收藏