Go语言技术文章
-
Go 的 nil map 读取会返回元素零值,但写入会触发 panic。本文用可复现的判断方式拆开读取、ok 值、len、make 和嵌套 map 的边界,给出稳定修复方案。318 收藏 -
支付、下单或重试场景里,Go HTTP API 需要区分同一请求的安全重放与参数冲突。本文从调用方体验出发,设计 Idempotency-Key 的语义、存储状态、过期策略和错误响应,并给出可运行的 Go 示例。317 收藏 -
从一个一次性迭代器出发,拆开 slices.SortedFunc 的收集、比较与返回边界,说明如何处理结构体排序、空序列和比较器契约。317 收藏 -
讲清 Go 的 json.Marshal 对 map 键的支持边界:字符串、整数和 encoding.TextMarshaler,以及结构体、浮点数等键的替代方案。317 收藏 -
Go container/list 读取链表节点的实用写法:从 Front、Back 开始,用 Next、Prev 遍历,通过 Value 和类型断言取出业务数据,并处理空链表与删除节点边界。317 收藏 -
围绕 Go slices.BinarySearch 讲清升序切片的查找、未命中插入点、重复值与空边界,并用 BinarySearchFunc 处理结构体字段排序。317 收藏 -
Golang · Go教程 | 2个月前 | HTTP · Go教程 · 服务治理 · SIGTERM Go 优雅关闭 http.Server Shutdown Go HTTP 服务 连接收尾 服务下线
Go HTTP 服务下线时,直接退出会打断进行中的请求;只调用 Shutdown 又可能无限等待。本文结合 net/http 官方行为说明信号接收、流量摘除、超时预算、长连接和依赖收尾应该怎样拆分。316 收藏 -
Go 1.21 之后,go 命令会根据 go.mod 的 go、toolchain 指令选择工具链。本文用一个 CI 版本漂移场景,拆开自动切换的依据、GOTOOLCHAIN 的三种边界,以及如何保留本地便利和线上可复现。316 收藏 -
把多项错误拼成字符串会丢掉可判断的错误链。本文以校验、写盘和关闭资源为例,演示如何迁移到 errors.Join,保留 errors.Is 判断能力,并处理 nil、重复错误与 errors.Unwrap 的边界。316 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · 错误处理 · IO · 文件读取 · Go问答 · Go LimitReader eof Reader io.LimitedReader 读取上限
io.LimitedReader 读完 N 个字节后会先把 N 变成 0,并在下一次读取时返回 EOF;这和底层 Reader 是否已经到达结尾不是一回事。本文用可运行示例拆开上限耗尽、真实 EOF 和底层错误的判断边界。316 收藏 -
用一个一次性初始化场景拆开 atomic.Bool.CompareAndSwap 的成功与失败路径,说明它如何把状态切换和抢占执行权合成原子动作,以及失败后何时跳过、何时重试。316 收藏 -
使用 Go 标准库 archive/zip 将多个服务端文件逐个写入 ZIP,并通过 HTTP 以附件形式下载;文章同时说明条目命名、Close 顺序、临时文件和错误处理。316 收藏 -
交叉编译启用 cgo 失败,通常不是 GOOS/GOARCH 写错,而是缺少目标平台 C 编译器、头文件、库或链接器。本文给出定位顺序、构建命令与纯 Go 替代方案。316 收藏 -
Go 的 sql.DB 是连接池句柄,而 sql.Tx 绑定事务连接。事务内部如果继续调用 DB.Query,查询可能落到另一条连接,读不到未提交数据。本文说明边界、改法与回滚收口。316 收藏 -
解释 Go runtime.KeepAlive 为什么要紧跟系统调用放置,帮助排查 finalizer 过早关闭文件描述符导致的偶发 EBADF。316 收藏