Go语言技术文章
-
Go crypto/x509.ParseRevocationList 可以把 ASN.1 DER 编码的 X.509 v2 CRL 解析为 RevocationList。本文说明如何从 PEM 取出 DER、读取撤销证书条目,并区分解析、旧字段和签名校验边界。471 收藏 -
sync.Pool 取出的对象不一定是新对象,Get 也可能把池视为空并调用 New。本文用 bytes.Buffer 说明为什么要在 Get 后重新初始化业务状态、在 Put 前清理临时数据,以及怎样划分调用方持有边界。471 收藏 -
Go cgo 的限制不是禁止所有 Go 指针传给 C,而是要求传入的 Go 内存在 C 可访问期间保持 pinned,并禁止 C 在调用返回后保存未固定的 Go 指针。本文解释可达指针、切片和字符串边界,并给出 C 堆复制、runtime/cgo.Handle 与 runtime.Pinner 的选择方法。471 收藏 -
netip.ParseAddr 解析 IPv4 映射地址后,Is4、Is6、String 和字节长度看起来不一致,是因为 Addr 保留了 IPv4-in-IPv6 的身份。本文说明 Is4In6、Unmap、As4 与 AsSlice 的区别,以及何时应该显式统一表示。471 收藏 -
Go exec.Cmd 返回 error 时,不能只把所有错误都当成退出码。本文按 Start/Run、ExitError 和 ProcessState 拆分启动错误、非零退出和等待 I/O 错误,并给出可复用的判断代码。471 收藏 -
Go 里用 CmdContext 设置超时后,父命令返回并不等于整棵子进程树已经退出。本文用可复查的命令场景解释 context 取消、Wait 返回、子进程残留和回收验证之间的边界,给出带退出状态检查的处理方式。470 收藏 -
Golang · Go教程 | 2个月前 | 标准库 · golang · 测试 · go · 迭代器 · 字符串处理 · Go 迭代器 换行 range over function strings.Lines
Go 1.24 引入的 strings.Lines 返回一次性迭代器,逐行保留换行符;本文用可运行示例拆开末尾换行、空输入、最后一行和重复消费等边界,并给出测试写法。470 收藏 -
Go 1.22 引入的 Request.PathValue 不是从 URL.Path 里随便切字符串,而是读取 ServeMux 匹配结果中的命名通配符。本文用最小路由示例核对普通通配符、{name...}、未匹配请求、URL 解码和 SetPathValue 的边界。470 收藏 -
Go 1.25 为 go doc 增加 -http 选项,可以把指定对象的本地文档通过浏览器查看。本文用 net/http 演示启动方式、端口排查和文档范围判断。470 收藏 -
用 encoding/xml.Decoder 按 Token 扫描大型 XML,只在命中目标元素时 DecodeElement,并用 Skip 跳过无关大节点,降低整体加载带来的内存峰值。470 收藏 -
Go 的 math/big.Float 使用二进制尾数精度,不是十进制小数位。本文用原创示例解释 SetPrec、舍入模式、运算接收者和 Text 输出之间的区别。470 收藏 -
使用 Go io.CopyN 写归档文件时,不能只看目标文件是否存在;本文用 written、err、临时文件和 Stat 组合确认目标长度,避免把部分归档误当成功。470 收藏 -
bufio.Reader.ReadString 读不到分隔符时,可能返回已经读到的字符串和 io.EOF。本文用返回值边界、最后一段处理和读取循环说明如何避免丢数据、误报错误与死循环。470 收藏 -
testing.T.Setenv 修改的是整个测试进程的环境变量,因此不能在并行测试或有并行祖先的测试中使用。本文说明冲突原因、串行拆分方式,以及如何用局部配置让并行子测试保持隔离。470 收藏 -
用最小示例解释 Go io.MultiWriter 遇到目标短写时为何返回 io.ErrShortWrite、停止后续写入,以及如何避免重试导致的数据错位。470 收藏