Go问答技术文章
-
Go archive/tar 的 Reader.Next 会把作用于文件的 PAX 扩展记录合并到 Header。本文说明怎样读取 PAXRecords、区分普通字段与自定义键,并处理 EOF、坏扩展头和全局头边界。191 收藏 -
Go testing.T.SkipNow 结束的是当前测试函数的后续语句,不会跳过已经登记的 t.Cleanup。本文拆解 SkipNow、runtime.Goexit、子测试和后台 goroutine 的生命周期边界,给出资源登记与跳过用例复查清单。191 收藏 -
从方法、主机、路径段、尾斜杠、通配符和转义规则解释 Go ServeMux 为什么未命中,并用 Handler 返回值定位实际匹配模式。191 收藏 -
Go os.Rename 遇到已存在的目标目录会返回错误,不能把目录替换误当成文件覆盖。本文说明错误识别、非空目录保护、合并迁移与回滚边界。191 收藏 -
Go ksuid 的 KSUID 时间部分适合做按生成时间的大致排序线索,但只有秒级粒度且依赖生成机时钟,不能直接替代业务事件的精确发生时间。本文说明 Time 与 Timestamp 的区别,并给出事件时间单独落库的建模方式。191 收藏 -
runtime.SetFinalizer 不是定时器,也不保证在进程退出前执行。本文从对象可达性、闭包捕获、引用环、GC 与单一 finalizer 队列几个方向解释对象未及时回收,并给出 KeepAlive、显式 Close 与 AddCleanup 的选择边界。191 收藏 -
go/constant的未知值会沿依赖它的常量运算延续。本文说明MakeUnknown与Kind判断、错误原因的独立保存,以及比较和数值提取接口的状态处理。191 收藏 -
ForceAttemptHTTP2 只允许尝试而不强制协商成功。通过完整 HTTPS 诊断示例读取响应 Proto 与 TLS ALPN,区分实际 Transport、Protocols、TLSNextProto、自定义拨号、代理和对端能力,并说明安全修复与回退边界。190 收藏 -
iter.Seq2 是 Go 1.23 引入的双值迭代器类型,range 左侧最多接收键和值两个变量。本文用 map、slice 和自定义迭代器说明绑定顺序、提前停止与 iter.Pull 的边界。190 收藏 -
解释 Go Lumberjack 的 MaxSize 为什么只限制当前日志文件,并区分 MaxBackups、MaxAge、压缩备份与目录中其它文件,给出目录总量排查和组合配置方法。190 收藏 -
bytes.Reader.Size 返回底层字节切片的原始长度,普通 Read 推进后它不会变化;真正表示当前未读数据的是 Len。本文用分段读取示例说明两个指标的区别,并给出进度计算、Reset 与 ReadAt 的边界。190 收藏 -
Go httptrace.GetConn 可以记录 Transport 在连接阶段准备处理的 host:port。本文说明如何绑定 ClientTrace、区分 GetConn 与 GotConn,并处理代理、并发回调和 Response.Body 清理边界。190 收藏 -
Go TLS 客户端默认使用主机信任根,不会凭空信任自签名根证书。本文解释 RootCAs 的来源,并给出保留系统根证书、追加私有根证书的安全写法。189 收藏 -
Go errors.Is 判断包装错误不生效时,优先检查 %w 是否保留错误链、哨兵错误是否复用,以及自定义 Is 是否只做稳定的浅匹配。189 收藏 -
Go filepath.Glob 返回空切片不一定是异常:模式写错才会返回 filepath.ErrBadPattern,而目录不存在、没有匹配项和部分文件系统错误可能都表现为空结果。本文给出清晰的判断与补查方式。189 收藏