Go语言技术文章
-
runtime.SetFinalizer 不是定时器,也不保证在进程退出前执行。本文从对象可达性、闭包捕获、引用环、GC 与单一 finalizer 队列几个方向解释对象未及时回收,并给出 KeepAlive、显式 Close 与 AddCleanup 的选择边界。191 收藏 -
围绕 Go maps.Keys 讲清无序键迭代、slices.Sorted 排序、空映射 nil 结果、后续值读取与并发写入边界。191 收藏 -
go/constant的未知值会沿依赖它的常量运算延续。本文说明MakeUnknown与Kind判断、错误原因的独立保存,以及比较和数值提取接口的状态处理。191 收藏 -
ForceAttemptHTTP2 只允许尝试而不强制协商成功。通过完整 HTTPS 诊断示例读取响应 Proto 与 TLS ALPN,区分实际 Transport、Protocols、TLSNextProto、自定义拨号、代理和对端能力,并说明安全修复与回退边界。190 收藏 -
用 Go log/slog.Value.Resolve 展开 LogValuer 延迟字段,说明自定义 Handler 如何遍历 Record.Attrs、处理 Group,以及递归和错误边界。190 收藏 -
iter.Seq2 是 Go 1.23 引入的双值迭代器类型,range 左侧最多接收键和值两个变量。本文用 map、slice 和自定义迭代器说明绑定顺序、提前停止与 iter.Pull 的边界。190 收藏 -
解释 Go Lumberjack 的 MaxSize 为什么只限制当前日志文件,并区分 MaxBackups、MaxAge、压缩备份与目录中其它文件,给出目录总量排查和组合配置方法。190 收藏 -
用 Gonum stat.LinearRegression 拟合一元线性回归,说明 x、y 样本、权重、origin 参数、截距斜率和 R² 的关系,并给出适合工程读数的判断边界。190 收藏 -
Go 1.23 起可以用 maps.Keys 把 map 的键暴露为迭代器;如果输出、日志或测试需要稳定顺序,再交给 slices.Sorted 或 slices.SortedFunc 生成新的键切片。本文按调试清单说明版本、顺序和键类型边界。190 收藏 -
bytes.Reader.Size 返回底层字节切片的原始长度,普通 Read 推进后它不会变化;真正表示当前未读数据的是 Len。本文用分段读取示例说明两个指标的区别,并给出进度计算、Reset 与 ReadAt 的边界。190 收藏 -
Go 1.23 起,range over func 可以用 yield 的布尔返回值把消费者的 break 传回函数迭代器。本文用批处理示例说明如何及时停止底层遍历、避免物化中间切片,并区分减少额外分配与保证零分配的边界。190 收藏 -
Go httptrace.GetConn 可以记录 Transport 在连接阶段准备处理的 host:port。本文说明如何绑定 ClientTrace、区分 GetConn 与 GotConn,并处理代理、并发回调和 Response.Body 清理边界。190 收藏 -
Go 的 net.LookupTXT 返回的是 TXT 记录切片,同一条记录的多个字符串片段已经被拼成一个字符串;本文说明如何保留多条记录边界、设置查询超时并做长度统计。190 收藏 -
Go log/slog 用 Group 组织单条日志字段,用 WithGroup 和 With 复用公共字段,再用 GroupAttrs 接入动态 Attr 切片。本文按 request、user 和 order 场景说明字段层级与基准指标的检查方法。189 收藏 -
Go TLS 客户端默认使用主机信任根,不会凭空信任自签名根证书。本文解释 RootCAs 的来源,并给出保留系统根证书、追加私有根证书的安全写法。189 收藏