Go语言技术文章
-
Go 服务里调用 context.WithCancel 后忘记 cancel,可能让定时器和子 goroutine 活得比请求更久。本文用一个可复现的小例子,说明 defer cancel 的正确位置、循环里的取消边界,以及如何用 goleak 和 pprof 复查。122 收藏 -
Go 服务部署到容器后,日志时间常常从本地时间变成 UTC。本文拆开 time.Time 的位置、time.LoadLocation 的加载方式和 JSON 序列化边界,给出一套可回归验证的处理方案。500 收藏 -
Golang · Go教程 | 2星期前 | WEB开发 · 标准库 · HTTP · go · 路由迁移 Go ServeMux HTTP路由冲突 method pattern host pattern
把旧版 Go HTTP 路由迁移到支持方法和主机模式的 ServeMux 时,最容易误判的是注册顺序。本文用冲突示例解释方法、路径、主机三种匹配关系,给出启动期检查、兼容写法和 httptest 回归边界,避免服务上线后才发现请求落到了错误处理器。437 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · go · html/template · 错误排查 · Web模板 · Parse 模板函数 Go html/template FuncMap 模板初始化
Go html/template 使用自定义函数时,FuncMap 必须在 Parse 或 ParseFiles 前注册,否则模板会在解析阶段报 function 未定义。本文用一个邮件通知模板的小实验,拆开注册顺序、模板错误定位、运行时参数校验和安全边界。451 收藏 -
读取日志头、文件摘要或上传内容前 N 个字节时,io.LimitReader、io.CopyN 和手动缓冲的行为并不一样。本文按目标是限制读取、严格读取还是复用缓冲,给出选择边界、EOF 判断和可验证示例。130 收藏 -
列表接口从 page 改成 cursor 时,真正容易出问题的不是 SQL,而是参数语义、错误响应和旧客户端兼容。本文用 Go net/http 设计一个可灰度迁移的游标分页接口,给出返回结构、边界校验、错误码和回归检查。427 收藏 -
sync.Cond 的 Wait、Signal 和 Broadcast 不是消息队列,正确用法是持锁检查条件、循环等待,并在状态变化后通知。本文用任务队列示例解释信号丢失、虚假唤醒和关闭退出的处理边界。393 收藏 -
context.AfterFunc 适合把取消信号转换成资源清理回调,但 Stop 返回 false 时回调可能已经启动,不能把它当成完成通知。本文从旧式 done 监听迁移到 AfterFunc,拆解取消、停止、同步和测试边界。224 收藏 -
Go 服务把审计日志同步写进一个文件后,吞吐上不去、磁盘抖动还会拖慢请求。本文用分片队列和批量落盘拆开写入压力,并验证顺序、重放与停机收尾。430 收藏 -
Go 1.24 新增的 os.Root 可以把文件操作限制在指定目录内,减少路径拼接带来的越界风险。本文用一个导入任务目录演示 Open、Join、Mkdir 和遍历文件的安全边界,并用回归测试核对绝对路径、.. 路径和符号链接场景。340 收藏 -
sync.Map 不是普通 map 的无脑替代品。本文用热点配置缓存这个场景,比较读多写少、频繁更新和带类型断言三种路径,结合 Go 基准测试与内存占用,说明什么时候值得采用、什么时候应该继续使用 map 加 RWMutex。318 收藏 -
Go database/sql 连接池参数怎么配?本文用 MaxOpenConns、MaxIdleConns 和 ConnMaxLifetime 做一次最小实验,区分连接不足、等待过长与连接复用失效,并给出可验收的指标。494 收藏 -
Go 服务接收突发任务时,直接为每个任务创建 goroutine 容易让内存和下游资源一起失控。本文从无界提交开始,逐步改成固定 worker、有限队列、可观测的拒绝策略和可等待的优雅停机。439 收藏 -
Golang · Go教程 | 2星期前 | golang · sse · Go教程 · net/http · 接口设计 · HTTP Go SSE FLUSH 流式响应 ResponseController
Go 的流式响应不是把多次 Write 拼起来就结束了。本文从 http.ResponseController.Flush 入手,做一个可验证的 SSE 示例,解释缓冲何时真正送达、HTTP/2 与代理会带来什么差异,以及客户端断开后如何让 goroutine 和 ticker 及时收口。463 收藏 -
Golang · Go教程 | 2星期前 | golang · JSON · 故障排查 · Go教程 · 接口设计 · JSON Go 接口兼容性 DisallowUnknownFields 严格解码
接口增加 json.Decoder.DisallowUnknownFields 后,旧客户端多传字段会从静默兼容变成 400。本文用一个订单接口故障复盘这个变化,说明如何定位触发条件、保留严格校验的收益,并通过灰度和版本边界避免再次误伤旧请求。174 收藏