Go语言技术文章
-
Go 1.21 引入的一次性值函数适合把一次性计算封装成并发安全的惰性值。本文从配置快照加载场景出发,说明它的最小写法、panic 语义、错误值处理、旧版本兼容和上线前检查边界。314 收藏 -
Golang · Go教程 | 1天前 | 性能分析 · Go教程 · 运行时监控 · 直方图 · Go p99 Float64Histogram runtime/metrics Buckets Counts
runtime/metrics.Read 返回 Float64Histogram 后,P99 不能直接对 Buckets 求平均。本文用 Buckets 与 Counts 的累计权重定位分位桶,并说明负无穷、正无穷和样本不足时的处理边界。314 收藏 -
Go 泛型函数里,类型参数能否调用方法取决于约束是否明确声明该方法,而不是具体类型本身是否拥有它。本文用最小代码拆开类型集合、方法集和接口约束的边界。313 收藏 -
多个 goroutine 同时查询时,如何只接收一个可用结果并让其余任务及时退出?本文用一个可复现的 Go 示例拆开 select 竞争、取消信号和结果通道关闭顺序。312 收藏 -
Go 的 regexp.FindStringSubmatchIndex 返回的是字节下标,不是字符位置。本文用带中文的日志片段说明如何读取捕获组、处理未匹配分组,并避免切片越界。312 收藏 -
Go 的 bytes.Buffer.AvailableBuffer 返回可借用的尾部空间,但它不是已经写入的数据。本文用最小程序说明 Bytes、AvailableBuffer、Write 与 Reset 的边界,避免把缓冲容量误当成有效长度。312 收藏 -
Golang · Go教程 | 2天前 | golang · 服务端 · 故障排查 · net/http · 连接泄漏 StateIdle ConnState Go net/http StateHijacked
Go net/http 的 ConnState 能记录连接从新建、活跃、空闲到关闭的状态变化,但它不是按请求计数的万能监控器。本文用一个连接数持续上涨的场景,建立状态计数、识别 Hijacked 长尾,并用复现和回收检查确认问题是否真正消失。311 收藏 -
用 netip.ParseAddrPort 统一校验 host:port 输入,拆开 IPv4、IPv6 方括号、缺失端口和端口越界等边界,并给出可复用的 Go 代码。310 收藏 -
Go 的 context.WithCancelCause 能让调用方同时看到 context.Canceled 和真正的取消根因。本文用一个请求链示例拆解取消传播、Cause 读取、父子上下文竞速与错误包装边界。309 收藏 -
Go 复用 time.Timer 时,Reset 的调用时机、旧值处理和 Go 版本语义容易混在一起。本文用一个超时循环拆开 stopped、expired、drain 与 1.23 之后的行为边界。309 收藏 -
Golang · Go问答 | 1天前 | 标准库 · golang · HTTP · url · Go问答 · Go path net/url RawPath url.URL.JoinPath URL转义
Go 的 url.URL.JoinPath 会清理路径片段,但不会替你判断斜杠是分隔符还是数据。本文用 Path、RawPath 和 PathEscape 对比说明 URL 拼接与转义的边界。309 收藏 -
sync.Map 的 Range 适合遍历当前可见条目,却不提供并发快照。本文用 Store、Delete 与 Range 的交错过程拆开这个边界,并给出需要一致视图时的替代写法。308 收藏 -
os.ReadFile 适合一次性读取小文件,但面对超大配置会把完整内容装入 []byte。本文比较 os.ReadFile、os.Open 与 bufio.Reader 的使用边界,给出按行分块解析和可复查的内存控制方法。307 收藏 -
strings.Builder 的 Grow 只保证后续写入有足够容量,并不等于最终字符串长度。本文用一段可运行的 Go 示例拆开 Grow、Cap、String 和 copyCheck 的关系,说明什么时候该预留容量、为什么不能复制非零 Builder,以及如何验证结果。307 收藏 -
Go 的 Header.Get 找不到请求头和找到空值时都可能返回空字符串。本文用 Header.Set、Header.Get、Header.Values 和 CanonicalMIMEHeaderKey 拆开这个边界,给出缺失判断、重复值读取与大小写处理的可运行写法。306 收藏