Go语言技术文章
-
Golang · Go教程 | 5天前 | 性能分析 · Go教程 · 运行时监控 · 直方图 · Go p99 Float64Histogram runtime/metrics Buckets Counts
runtime/metrics.Read 返回 Float64Histogram 后,P99 不能直接对 Buckets 求平均。本文用 Buckets 与 Counts 的累计权重定位分位桶,并说明负无穷、正无穷和样本不足时的处理边界。314 收藏 -
Golang · Go问答 | 5天前 | 流式处理 · 工程实践 · 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问答 | 5天前 | 命令行 · 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问答 | 5天前 | 字符串 · 标准库 · 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 收藏 -
Golang · Go教程 | 5天前 | 标准库 · 性能 · 迭代器 · 字符串处理 · Go教程 · Go Go 1.24 iter.Seq strings.SplitAfterSeq 字符串分段
strings.SplitAfterSeq 从 Go 1.24 开始返回单次使用的 iter.Seq[string],按分隔符产出保留分隔符的字符串片段。本文用一个可运行的小实验说明如何消费它、如何提前停止,以及空分隔符和无匹配时该如何验收。141 收藏 -
regexp.ReplaceAllString 会把替换字符串里的 $1 当成子匹配引用;需要保留字面量时,应根据输入来源选择 ReplaceAllLiteralString 或 ReplaceAllStringFunc。205 收藏 -
Go 1.24 引入的 os.Root 能把文件操作限制在指定目录内,但它不是忽略符号链接的黑盒。本文用 OpenRoot、Root.Open 与 Root.FS 拆解路径越界、目录链接和 DirFS 的边界。280 收藏