Go语言技术文章
-
bytes.Clone 返回独立的 []byte 副本,适合把复用缓冲区中的数据保存成安全快照。本文用可复现代码说明 append、切片别名和 bytes.Clone 的差异,并给出基线与边界。202 收藏 -
Go 泛型接口同时写类型集和方法时,约束的是可接受的类型与可调用的方法。本文用一个可运行的小实验拆开两层边界,解释为什么某些类型能传入、为什么调用方仍然不能调用具体类型方法,并给出检查和扩展写法。201 收藏 -
Go 的 json.Decoder.DisallowUnknownFields 能及时发现请求体中的未知字段,但直接全局开启也可能破坏旧客户端兼容。本文用可运行示例拆解严格解析、错误定位、兼容迁移和上线检查清单。201 收藏 -
Go 1.23 引入的 slices.Values 可以把切片包装成 iter.Seq。本文从实现、空切片和提前停止三个边界出发,说明它与普通 range、slices.Collect 的连接方式。201 收藏 -
复用 Go 的 time.Timer 时,Reset 的安全关键不是重新设置时长,而是先确认旧定时器是否停止、是否仍有到期信号,以及是否存在多个 goroutine 同时消费 C。本文用单次超时循环拆解 Stop、Reset、timer.C 和并发读取的边界。199 收藏 -
用 Go net/http 实现一个可取消的 SSE 心跳服务,串起 Flusher、Request.Context、断线检测和资源回收,重点看连接结束后如何让后台工作及时停下来。198 收藏 -
Go 1.20 引入 unsafe.StringData、unsafe.String 和 unsafe.SliceData 后,字符串与字节切片之间可以少一次复制,但指针生命周期、只读约束和空字符串边界必须一起核验。本文用可复现实验拆开这些风险。197 收藏 -
bytes.Buffer.AvailableBuffer 返回的不是可长期持有的普通切片,而是给下一次 Buffer.Write 准备的可追加空间。本文用最小示例说明 Append、Write、Bytes 之间的边界,以及何时必须复制数据。197 收藏 -
服务启动后,配置、正则或只读客户端常常只需要初始化一次,却要被多个 goroutine 安全读取。本文用 Go 标准库的一次性值函数演示惰性初始化、结果缓存、panic 复用与测试边界,说明它和手写 sync.Once 的取舍。196 收藏 -
Go 的 log/slog 会解析 LogValuer 返回的 Value。本文用一个最小示例说明返回自身为什么不会无限递归、Resolve 的保护边界在哪里,以及如何为敏感字段设计稳定的日志值。196 收藏 -
Go 的 database/sql.Conn.Raw 会在回调期间暴露底层驱动连接,但这个对象只能在回调内使用。本文拆开回调边界、driver.ErrBadConn、连接归还池和 Conn.Close 的并发安全问题。196 收藏 -
Golang · Go教程 | 3天前 | 标准库 · JSON · go · 后端开发 · 版本迁移 · JSON Go 1.27 encoding/json/v2 encoding/json/jsontext GOEXPERIMENT
Go 1.27 带来 encoding/json/v2 与 encoding/json/jsontext。本文从旧 encoding/json 兼容边界开始,演示 v2 的选项配置、重复字段和非法 UTF-8 的回归检查,并给出灰度试用与 GOEXPERIMENT=nojsonv2 回退清单。195 收藏 -
Go SSE 连接断开后,客户端应把服务端下发的 id 保存为恢复游标,重连时通过 Last-Event-ID 请求缺口;服务端按游标补发并让消费动作具备幂等性,才能同时避免漏事件和重复处理。194 收藏 -
Go slices.BinarySearch 返回的索引即使找不到元素也有意义:先保证切片有序,再用 found 判断命中,并把索引作为插入位置或下界使用。194 收藏 -
Go 泛型代码里,值类型约束明明包含目标类型,却可能无法调用指针接收者方法。本文用类型集、方法集和可运行示例拆开这个边界,并给出约束与调用方都能验收的写法。193 收藏