Go语言技术文章
-
Golang · Go问答 | 2天前 | 标准库 · 排序 · 泛型 · Slices · Go问答 · Go 稳定排序 iter.Seq slices.SortedStableFunc slices.Values
slices.SortedStableFunc 适合把迭代器中的数据收集到新切片后稳定排序。本文用订单优先级示例说明相等元素为什么保序、原切片为什么不会被直接改写,以及 Go 1.23 代码的兼容边界。266 收藏 -
Golang · Go问答 | 2天前 | go · 密码学 · 安全编程 · 密钥管理 · crypto/ecdh · Go crypto/ecdh PrivateKey.Bytes NewPrivateKey 密钥导出
crypto/ecdh.PrivateKey.Bytes 返回私钥的原始编码,适合在明确的密钥序列化边界重新调用 Curve.NewPrivateKey;本文拆开复制语义、曲线长度校验和敏感字节生命周期,避免把原始私钥 bytes 当成通用密钥文件格式。235 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,资源包装对象可以把兜底清理与显式 Close 分开。本文用一个文件描述符包装示例说明 AddCleanup、Cleanup.Stop、KeepAlive 的调用边界,以及为什么它不能替代显式关闭。108 收藏 -
Golang · Go教程 | 2天前 | 性能分析 · Go教程 · 运行时监控 · 直方图 · Go p99 Float64Histogram runtime/metrics Buckets Counts
runtime/metrics.Read 返回 Float64Histogram 后,P99 不能直接对 Buckets 求平均。本文用 Buckets 与 Counts 的累计权重定位分位桶,并说明负无穷、正无穷和样本不足时的处理边界。314 收藏 -
Golang · Go问答 | 2天前 | 流式处理 · 工程实践 · net/http · Go问答 · HTTP服务器 · Go HTTP服务器 请求体 流式请求 EnableFullDuplex http.ResponseController
http.ResponseController.EnableFullDuplex 解决的是 HTTP 服务端同时读取请求体和写出响应的边界问题。本文用一个边读边回传的 Go Handler 拆开它的默认行为、启用时机、协议限制和测试检查点,说明什么时候该用,什么时候不该把它当成通用加速开关。296 收藏 -
用 time.ParseDuration 解析带小数、负号和多个单位的时长,区分语法错误与 Duration 溢出,并给出可复用的校验写法。358 收藏 -
Go 1.27 的 go/ast.PreorderStack 在遍历语法树时同时提供当前节点和父节点栈,适合判断嵌套函数、块作用域与调用位置。本文用一个可运行示例说明调用链、栈内容和边界处理。335 收藏 -
Golang · Go问答 | 2天前 | 命令行 · flag · 错误处理 · 工程实践 · Go问答 · Go Parse 命令行参数 参数解析 flag.FlagSet ContinueOnError
flag.FlagSet 的 Parse 失败并不等于整个对象回到初始状态。本文用 ContinueOnError 拆开 parsed、已写入的默认值、剩余参数和二次 Parse 的边界,说明什么时候应该新建 FlagSet,什么时候可以在测试或子命令场景复用。270 收藏 -
slog.Handler 收到的 Record 可能携带共享属性存储。单份转发通常可直接传递,多份分发或异步保留时应调用 Record.Clone,本文用 fan-out 与异步队列场景说明修改、并发和生命周期边界。119 收藏 -
用 Go 1.24+ 的 os.OpenInRoot 和 os.Root 将文件打开限制在指定目录内,理解相对路径、符号链接、错误边界与旧代码迁移方式。256 收藏 -
Go 1.22 引入的 base64.Encoding.AppendEncode 会把编码结果追加到已有 dst,而不是要求调用方先单独分配输出切片。本文用请求令牌拼接场景拆开 dst 前缀、EncodedLen 容量预估、append 扩容和输入边界,给出可核对的最小写法。501 收藏 -
Golang · Go问答 | 2天前 | 字符串 · 标准库 · go · 接口设计 · 边界处理 · Go strings.CutPrefix Go strings.CutSuffix 协议头 字符串裁剪 零值返回
strings.CutPrefix 和 CutSuffix 都返回裁剪后的字符串与 found 布尔值,但空前缀、未匹配和完整匹配的结果不同。本文用协议头解析场景说明如何组合两个函数,避免把未匹配误判为空字符串。180 收藏 -
Go 的 database/sql.Conn.Raw 会在回调期间暴露底层驱动连接,但这个对象只能在回调内使用。本文拆开回调边界、driver.ErrBadConn、连接归还池和 Conn.Close 的并发安全问题。196 收藏 -
io.Pipe 没有内部缓冲,它用同步的 PipeReader 和 PipeWriter 把生产者与消费者接起来。本文用一个流式导出示例说明 Write 为什么会阻塞、CloseWithError 如何传递失败,以及怎样避免 goroutine 泄漏。403 收藏 -
io.NewSectionReader 适合从一个可随机读取的数据源中切出固定区间。本文用 bytes.Reader 演示 Offset、Read、ReadAt、Seek 与越界 EOF 的实际边界,避免把局部读取误写成全量读取。439 收藏