Go语言技术文章
-
Go 1.27 的 database/sql.ConvertAssign 主要面向数据库驱动实现。本文说明如何在 RowsColumnScanner.ScanColumn 中复用 Scan 的类型转换规则,正确传递 ScanContext,并处理 NULL、溢出、Scanner、EOF 和资源关闭边界。109 收藏 -
Go 通过握手后的 ConnectionState.LocalCertificate 读取本地证书链。本文区分本地与对端证书,提供 DER 解析与指纹记录示例,说明恢复会话空链、多证书配置和证书轮换的观测边界。238 收藏 -
Go 1.27 为 crypto/x509.Certificate 增加 RawSignatureAlgorithm,可读取证书签名算法的 DER AlgorithmIdentifier。本文说明如何从 PEM 证书解析 OID,区分原始字节与 SignatureAlgorithm,并处理未知算法、ASN.1 错误和证书验证边界。326 收藏 -
Go 1.27 新增 crypto/mldsa,可用 MLDSA44、MLDSA65 或 MLDSA87 生成 ML-DSA 私钥。本文给出密钥生成、公钥导出、seed 恢复以及带 context 的签名验证写法,并说明参数尺寸和 FIPS 140-3 边界。342 收藏 -
Go 判断 IP 是否为回环地址时,优先把文本解析为 netip.Addr,再调用 IsLoopback。本文区分 IPv4、IPv6、映射地址、未指定地址和零值 Addr 的边界。209 收藏 -
用 github.com/google/uuid 处理 UUID 字符串时,外部输入应使用 Parse 并保留 error,固定可信常量才使用 MustParse,统一输出交给 String;严格 API 外形还要额外约束。230 收藏 -
Go 1.27 的 bytes.CutLast 可以按最后一次分隔符拆分字节切片。本文说明它与 Cut、LastIndex 的区别、未找到和空分隔符边界,以及返回原切片视图时何时需要 Clone。457 收藏 -
Go test -failfast 会在首个测试失败后停止启动新的测试,但不会把已经开始的并行测试瞬间杀掉。本文按串行、并行、清理和 CI 门禁的边界,说明如何用它快速定位失败。343 收藏 -
Go GC 参数改动后延迟升高,通常不是“GOGC 越小越快”这么简单。本文从 GC 周期、分配速率、GC assist 与软内存上限入手,给出最小复现、指标判断和单变量修正方法。333 收藏 -
runtime.ReadMemStats 统计的是 Go 运行时的分配与保留情况,不等于操作系统看到的进程 RSS。本文用字段对照和 Linux 最小采集示例说明差异来源与排查路径。423 收藏 -
Go trace 和 pprof 的先后取决于症状:CPU 与内存热点先看对应 profile,低 CPU 高延迟和调度问题看短窗口 trace。本文给出选择表、原创编码基准和独立采集命令,说明口径与开销边界。179 收藏 -
解释 Go slog JSONHandler 遇到不可序列化值时为什么输出 !ERROR:json,并给出稳定摘要与 LogValuer 修正方式。470 收藏 -
解释 time.Timer.Stop 返回 false 在 NewTimer 与 AfterFunc 中的不同含义,区分 Go 1.23 同步计时器通道与旧语义,并给出避免重复处理到期事件的收尾方式。246 收藏 -
Go 服务器调用 Shutdown 后仍可能因主协程提前退出、排空上下文已取消或外部期限到达而截断请求。通过原创服务示例拆解退出顺序、超时强制关闭和依赖收尾。451 收藏 -
Go select 中多个 case 同时就绪时,不按源码顺序固定选择,而是在可继续的通信中做均匀伪随机选择。本文说明怎样识别最终分支、区分表达式求值与通信执行,并处理 default、nil 和 closed channel 的边界。375 收藏