Go语言技术文章
-
Go 1.27 的 bytes.CutLast 可以把按最后分隔符拆分的返回值直接表达为 before、after 和 found,省掉 LastIndex 后的偏移计算,同时保留未找到分隔符和原始切片共享这两个边界。381 收藏 -
Go 解析 Set-Cookie 后,完整输入行会保存在 http.Cookie.Raw;本文说明怎样从 Response.Cookies 或响应头逐条读取它,并区分 Raw、Unparsed、RawExpires 与 String() 的重建结果。381 收藏 -
Go race 检测器需要 cgo,并不代表自动覆盖 C 库内部全部访问。本文区分 Go 共享状态、C 库内部并发与跨语言指针生命周期,给出串行封装和最小测试命令,说明无报告的适用范围。381 收藏 -
Go crypto/ecdh 的 X25519 公钥不是任意长度的椭圆曲线点,而是固定 32 字节的 u 坐标编码。本文解释 NewPublicKey 的输入边界,并对比 P-256 的未压缩点格式,避免协议字段混用。381 收藏 -
说明Go channel用range消费直到关闭的方法,给出单生产者与多生产者示例,区分缓冲读空、有效零值、关闭权、取消和业务完成。381 收藏 -
Go 的 build constraints 不是只看文件里有没有 import C,而是由显式 //go:build、文件名后缀、目标平台和 cgo 是否启用共同决定文件是否进入包。本文用一对互补实现说明纯 Go 与 cgo 文件的选择规则、跨编译边界和 go list 排查方式。381 收藏 -
Go 的 URL.Path 会保存解码后的路径,RawPath 只是可选的编码提示。本文用 %2F 场景解释 EscapedPath 何时采用 RawPath、何时忽略它,并给出解析和手动构造 URL 时的稳妥写法。381 收藏 -
filepath.Rel 负责按当前系统规则计算相对路径,filepath.ToSlash 负责把成功结果转换成统一的 / 表示。本文用原创示例说明错误处理、输出格式和 .. 边界。381 收藏 -
Go time.Timer.Reset 的 true 和 false 不是成功失败,而是表示旧定时器在调用前仍 active,还是已经到期或停止。本文比较两种状态下的下一次触发、t.C 接收和 Go 1.23 之后的旧值语义,并给出可复用写法。381 收藏 -
GJSON 的 Exists 判断字段是否存在,空字符串判断的是字符串内容;缺失、null、空串和非空串并不是同一种状态。本文用一段最小 Go 示例说明四种状态的差异,并给出输入校验与审计时的选择方式。380 收藏 -
Go bytes.FieldsSeq 在 Go 1.24 起返回 iter.Seq[[]byte],按 unicode.IsSpace 规则遍历字段,不先创建承载全部结果的二维切片;本文从旧接口迁移、空白边界、切片生命周期和提前停止四个方面给出可直接使用的写法。380 收藏 -
用可选 Sender 示例解释 Go 接口为何会携带 nil 指针,区分接口比较、类型断言和对象可用性,并通过构造函数明确缺席时的 nil 返回约定。380 收藏 -
Go linkname 会改变对象文件符号绑定并绕过普通包封装。本文区分公开 API、握手式 linkname 和单方面拉取内部符号的风险,结合 Go 1.23 之后的链接器限制说明如何评估兼容性与维护成本。380 收藏 -
Go 标准库 uuid.NewV4 可以生成版本 4 UUID,再按下游类型选择 String、MarshalText 或 AppendText 转成文本。本文用一个最小请求 ID 项目说明三种出口、错误边界和接入检查点。380 收藏 -
Go hash/crc32 的 IEEE 与 Castagnoli 不是可以随意互换的参数。本文用 MakeTable、Checksum、New 和 Update 说明如何按协议兼容性选择多项式,并划清 CRC32 与加密摘要的边界。380 收藏