Go语言技术文章
-
Go net/http 的 CrossOriginProtection 被拒绝时,可以先用 SetDenyHandler 设置统一的 403 响应,再交给 Handler 包装业务处理器。本文对比 Handler 与 Check 的职责,给出 JSON 拒绝响应和手动处理 error 的写法。309 收藏 -
crypto/ecdh 没有 ParsePrivateKey,Bytes 的原始私钥字节应通过指定曲线的 NewPrivateKey 恢复。示例保存格式版本、曲线与 Base64 载荷,并解释原始编码与 PKCS#8 的区别。309 收藏 -
Go regexp.Regexp 返回空字符串不一定是没有匹配,边界断言和可选量词可能只匹配一个位置。本文用 FindStringIndex 区分 nil、零宽匹配和真实文本,并说明多行模式与中文 边界的处理方式。309 收藏 -
Go 的 uint64 乘法会静默保留低 64 位。本文用 math/bits.Mul64 拆出 128 位乘积,通过 hi != 0 判断溢出,并封装可复用的安全乘法函数。308 收藏 -
Go 的 base64.Encoding.DecodedLen 返回的是解码数据的最大字节数,Decode 再返回实际写入长度。本文用 StdEncoding、RawStdEncoding 和 AppendDecode 说明怎样分配缓冲区、截取有效数据并处理部分解码错误。308 收藏 -
Go build ID 用于构建关联,-s、-w 控制符号和调试信息。本文比较默认与裁剪方案,给出发布命令示例,并说明精确制品、诊断材料与发布清单的关联责任。308 收藏 -
Go tar.Reader.Next 负责切换 tar 归档条目并返回 Header,当前 Reader 随后提供该条目的数据。本文说明 Next、Read、io.EOF 的边界,以及路径、类型和大小控制,帮助你安全遍历归档文件。308 收藏 -
Go 终端表格不能按字节长度补空格。本文用 go-runewidth.StringWidth 计算显示单元格,再用 FillRight 和 FillLeft 对齐中英文混合字段,并说明截断、emoji 与 EastAsianWidth 的边界。308 收藏 -
解释 go-imap v2 FetchCommand 的流式消费、关闭收尾和错误处理,给出可靠 Go 示例及等待耗时、内存成本的比较方法。308 收藏 -
用 strings.Cut 解析裸键、空值和普通配置值,减少临时拆分切片,附 ParseOption 批处理实现与 SplitN 对照基准代码,说明统计单位、错误语义和结果存储寿命。308 收藏 -
Go AST 中 FieldList.List 统计的是 Field 节点分组,不一定等于参数个数。本文用源码示例说明 Field.Names、NumFields 与可变参数的边界。308 收藏 -
Go net/http.Request 的 GetBody 为空时,已经读取过的 POST Body 不能直接重试。本文说明 NewRequest 的自动填充条件,并用请求体工厂为每次重试创建新的 Request 和 Body。308 收藏 -
Go 测试需要临时文件时,t.TempDir 可以创建测试专属目录,并在测试及其子测试结束后自动清理。本文说明目录生命周期、多次调用、并行子测试和 GOTMPDIR 的使用边界。307 收藏 -
atomic.Pointer 可以发布完整的不可变配置快照,但不会保护指针指向的 map 或字段。本文用独立副本、Store 和单次 Load 的完整示例,解释初始化、同版读取、多写者更新丢失及性能比较的边界。307 收藏 -
讲清 Go archive/zip 的 File.DataOffset 如何定位 ZIP 条目数据起点,并用 CompressedSize64 计算安全物理范围,区分 Open、OpenRaw 与偏移读取的使用边界。307 收藏