Go问答技术文章
-
Go 定时任务最容易被忽略的问题不是如何按时触发,而是上一次还没结束时下一次又开始。本文用 context、超时和退出确认设计一个不会重叠执行的任务循环,并说明失败、取消和告警怎么收口。440 收藏 -
Golang · Go问答 | 1星期前 | 切片 · 并发安全 · golang · Go问答 · slices.Clone · 底层数组 并发修改 Go slices.Clone Go切片 切片容量
slices.Clone 能复制 Go 切片,但它解决的是底层数组共享,不等于深拷贝或并发安全。本文用容量边界、append 行为和嵌套引用三个检查点说明该怎么选。371 收藏 -
Golang · Go问答 | 1星期前 | 并发 · golang · 错误处理 · Context · Go问答 · Go 错误处理 Go问答 context.WithCancelCause context.Cause context.Err
Go 并发任务被取消时,ctx.Err() 只能告诉你是取消还是超时,context.Cause(ctx) 才能保留业务失败原因。本文用一个可运行的任务链说明 Cause、Err、errors.Is 和错误包装各自负责什么。263 收藏 -
Go 的 time.Timer 不是改一个时间数字那么简单:Reset 前要先处理已经到达的旧事件,重置后还要保证只有一条超时路径能结束本次等待。本文用可复现的请求超时流程说明 Reset、Stop、通道读取和 context 的边界。291 收藏 -
解释 Go 接口值为什么看起来有指针却不等于 nil,并用动态类型、返回错误和类型断言示例定位这类问题。224 收藏 -
Go slog 适合把请求 ID、用户标识和耗时统一写入结构化日志。本文从 HTTP 请求场景出发,给出 context 传递、Handler 过滤和字段命名的最小写法,并说明哪些信息不应直接写入日志。485 收藏 -
把 time.After 放进高频循环,短时间内不断创建定时器,任务退出时还可能留下难以观察的等待路径。本文从一个轮询超时场景出发,拆解定时器创建、触发、退出和验证边界,并给出可回收的 time.NewTimer 写法。179 收藏 -
Go 的 PathEscape 与 QueryEscape 都能处理 URL 特殊字符,但服务端解析位置不同。本文用路径参数、查询参数和反向解析示例,说明编码边界、加号语义与测试方法。119 收藏 -
sync.Once 只保证初始化逻辑最多执行一次,失败也不会自动重试。通过区分一次性成功初始化、可重试初始化和启动失败退出,避免把错误状态永久缓存进服务进程。133 收藏 -
Go slog.Attr 适合把结构化字段交给日志处理器,但敏感字段不能在组装阶段被误写入。本文用请求日志场景说明 Attr 的组装顺序、脱敏边界、With 继承行为与单测核对方法。331 收藏 -
Go 测试使用 t.TempDir 创建临时目录时,目录会在当前测试及其子测试全部结束后自动清理。本文拆解清理时机、并行子测试、路径拼接和失败复现边界,给出可直接回归的测试写法。145 收藏 -
Golang · Go问答 | 1星期前 | 并发 · golang · HTTP · Context · Go问答 · 资源释放 context.Context 请求取消 Go问答 ctx.Done Go HTTP
Go 服务发布或重启时,http.Server.Shutdown 可以停止接收新连接并等待在途请求。本文说明优雅退出的调用顺序、超时边界、后台任务隔离和验收方式。176 收藏 -
解释 Go sync.Pool 的临时对象复用边界,说明 GC 为什么可以清空池、为什么不能拿它保存业务数据,并给出清理与并发核对方法。178 收藏 -
Go 的 sync 包双返回值 Once 辅助函数不只是把初始化代码执行一次,还会把第一次返回的值和错误一起缓存。本文用并发初始化配置的场景说明它与普通 Once 的边界。499 收藏 -
用 Go 的 crypto/rand.Text 替换自写随机字符串时,先确认 Go 版本,再处理字符集、长度、错误边界和回归测试,避免把 math/rand 误用于邀请码或令牌。241 收藏