Go语言技术文章
-
用 Go os/signal 和 NotifyContext 组织优雅停止:让取消信号传到后台 goroutine,等待资源收尾,并正确释放通知注册,避免服务退出后的 goroutine 泄漏。489 收藏 -
runtime.KeepAlive 用于让持有原生句柄的 Go 对象在指定位置前保持可达,避免 finalizer 提前关闭资源。本文给出最小写法、放置位置、适用边界与常见误区。489 收藏 -
Go 的 POST 请求第一次失败后重试,服务端却读到空 Body,通常不是服务端丢数据,而是请求体只被消费了一次。本文用 bytes.Reader、GetBody 和两次请求日志拆开这个问题,给出可验证的重试写法与边界。488 收藏 -
Go 1.21 之后,工具链版本不只由机器上的 go 决定。用 go.mod、GOTOOLCHAIN 和 CI 矩阵配合,能把自动升级、固定版本和失败回退边界讲清楚。488 收藏 -
用 Go atomic.Pointer 替换进程内共享配置时,关键不是把指针换掉,而是保证读线程拿到完整快照、发布顺序清楚且失败时能回到旧版本。本文用一份可运行的配置结构说明初始化、原子发布、校验和回滚边界。488 收藏 -
Go 1.24 为 net/http 增加 HTTP2Config 与 Protocols 配置。本文从服务端并发流限制和客户端兼容验证入手,说明 HTTP2Config 适合解决什么问题、哪些字段只对服务端生效,以及如何用最小代码确认协议协商结果。488 收藏 -
Golang · Go教程 | 3星期前 | 文件处理 · Go教程 · 安全编程 · Go archive/zip 路径穿越 ZIP解压 filepath.IsLocal filepath.Localize
Go 用 archive/zip 解压外部归档时,不能直接拼接成员名。本文说明如何处理 zip.ErrInsecurePath,用 filepath.Localize 和 filepath.IsLocal 拒绝绝对路径、.. 与跨平台分隔符,并用 os.Root 限制写入目录边界。488 收藏 -
用一个清晰判断区分 Context 元数据和业务参数:trace_id 等请求范围信息可以传播,userID、订单号和分页条件应回到显式函数签名,并用私有 key 与访问器收口类型断言。488 收藏 -
go.mod 的 go 指令不是备注,它同时限定最低 Go 版本、模块源码的语言语义和依赖版本下限;本文用代码和版本关系说明它与 toolchain、GOTOOLCHAIN 的分工。488 收藏 -
用 httptest.ResponseRecorder 测试 HTTP handler 时,优先通过 Result() 读取最终状态、响应头和响应体;本文解释 Code、StatusCode、Header 快照以及常见断言边界。488 收藏 -
Go 的 flate.NewReader 返回值同时实现 flate.Resetter,可在每段独立 DEFLATE 数据开始前调用 Reset 切换输入,复用内部已分配内存。本文给出完整循环,并说明 Close、字典、ByteReader 过读和并发使用边界。488 收藏 -
通过批量行协议案例说明 bytes.Buffer.Grow 的容量估算:区分新增字节与目标容量,计算固定开销、字段长度和编码膨胀,并处理复用池与异常大输入。488 收藏 -
讲清 tls.Config.Clone 的浅拷贝与并发边界,演示连接级配置派生、切片复制、证书池隔离和会话恢复注意事项。488 收藏 -
以大批量订单导出为例,介绍 Go 如何通过分段文件、固定内存排序、k 路归并和断点清单,把一次性组装结果改造成可恢复的流式导出流程。487 收藏 -
Go API 接收 JSON 时,如何用 Decoder.DisallowUnknownFields 拦截拼写错误和多余字段?本文从请求解码链路出发,给出可运行示例、错误响应策略与生产验收清单。487 收藏