Go语言技术文章
-
Go hash.Hash.Sum 会把当前摘要追加到传入切片末尾,不会覆盖已有前缀,也不会改变哈希状态。本文说明 dst、len、cap 与 Size 的关系,并给出安全的摘要追加写法。364 收藏 -
Go filepath.WalkDir 默认不会进入目录中的符号链接,这不是遍历失败,而是标准库刻意定义的边界。本文用最小目录树复现现象,再说明怎样读取链接本身、解析目标,并为显式递归补上循环保护。217 收藏 -
Go ascii85.NewEncoder 可能暂存不足四字节的尾块。本文解释 Write 与 Close 的职责,给出完整编码示例,并说明错误处理、外层缓冲和消息边界。398 收藏 -
用 net/http.CrossOriginProtection 保护状态变更接口时,如果健康检查使用非安全方法,可用 AddInsecureBypassPattern 配置精确的例外模式。本文说明方法匹配、直接匹配、冲突和默认拒绝边界。459 收藏 -
用最小示例拆开 Go os.Root 的根目录与相对名称,解释绝对路径、空路径、.. 越界和符号链接为什么会失败,并给出保留 PathError 的修复写法。301 收藏 -
区分 Go gosym.LineToPC 的文件键缺失与源码行无地址,给出保留错误类型的诊断代码,并说明源码版本、路径映射和近似定位的处理方式。415 收藏 -
Go 的 net.IPMask.Size 返回前导 1 的数量和掩码总位数。本文用 IPv4、IPv6、/0 与非连续掩码对照,说明怎样准确判断连续 CIDR 前缀,避免把合法零前缀误判为错误。424 收藏 -
用最小 Go 程序复现 os.OpenFile 的权限差异,解释 O_CREATE、perm、umask 与已有文件权限之间的关系,并给出需要显式 Chmod 时的处理方式。363 收藏 -
RawValue 的 FullBytes 非空时,Marshal 优先使用整段编码,修改 Bytes 不会自动使旧编码失效。本文用 OCTET STRING 字节对照展示问题,给出清空 FullBytes 与构造新值两种写法,并说明切片共享、基准方法和嵌套数据限制。325 收藏 -
Go 的 net.Resolver 可能在纯 Go DNS 解析和系统 cgo 解析之间走不同路径,因此同一域名会出现地址顺序、搜索域或错误表现差异。本文用 PreferGo、GODEBUG=netdns 和可控 Dial 构造最小复现,帮助定位解析器选择边界并写回归测试。441 收藏 -
Go 经过 HTTP 代理访问 HTTPS 时,代理需要的字段必须放在 CONNECT 握手请求中。本文区分 ProxyConnectHeader、GetProxyConnectHeader 与目标请求 Header,说明静态配置、动态回调、代理认证和错误边界。453 收藏 -
ELF 的 NOBITS 节可以有非零逻辑 Size,却没有对应文件内容。本文给出按节类型分支的 Go 读取器,区分正常空节、无文件内容与读取失败,并说明大小预算、资源关闭及旧代码迁移注意事项。284 收藏 -
netip.Addr 中的 192.0.2.1 与 ::ffff:192.0.2.1 可能指向同一个 IPv4,但前者是 IPv4、后者是 IPv4 映射 IPv6,因此直接比较不会相等。本文用最小复现解释 Is4、Is4In6、BitLen 与 Unmap 的关系,并给出 map 键和回归测试的处理方式。261 收藏 -
Go debug/pe 的 COFFSymbol.Name 只有 8 个字节,短名称直接内嵌,长名称则保存字符串表偏移。本文解释两种编码的判断方式,用 FullName 正确读取长符号名,并说明字符串表位置、辅助记录和坏偏移错误的处理边界。418 收藏 -
ExtensionsByType 并不返回空字符串,而是按 MIME 类型返回扩展名切片。本文区分 nil、空字符串和 error,并说明 TypeByExtension 与 AddExtensionType 的使用边界。256 收藏