Go语言技术文章
-
filepath.WalkDir 遇到根目录初次检查失败时,回调会收到 d=nil 和原始 err。本文用 Go 示例说明如何先处理错误、区分根目录不存在与权限问题,并把遍历结果安全交给上层。475 收藏 -
Go http.Client 的 Timeout 是客户端级兜底,context.WithTimeout 适合控制单次请求。本文用完整示例说明两者边界、超时错误判断、响应体清理和参数选择。475 收藏 -
解释 Go defer 直接参数与闭包读取的差异,结合 Go 1.22 循环变量语义,给出显式传参和小函数隔离生命周期的写法。475 收藏 -
用 slog.Level.UnmarshalText 解析 Go 日志级别配置,区分空值默认、非法值错误和数值偏移,给出可复用的配置加载函数。475 收藏 -
go/types.Hasher 面向源码类型与 types.Identical,reflect.Type 面向运行时类型表示。本文解释两者为什么不能直接比较哈希值,以及源码分析缓存和运行时缓存分别应该怎样选键。475 收藏 -
Go 的 golang.org/x/text/secure/precis 提供 Nickname profile,适合对国际化昵称做空格映射、NFKC 归一化和等价比较。本文区分 String、Compare、CompareKey 的用途,并给出查重与错误处理写法。475 收藏 -
Go Zerolog 自带 level 字段,但接入统一日志平台时,业务常常还需要 severity 等固定字段。本文从字段不一致的排查场景出发,说明如何用 Hook.Run 读取 zerolog.Level,统一补充 severity,处理 NoLevel、全局 logger、局部 logger 和字段覆盖边界。475 收藏 -
Go Decimal 的 DivRound 可以在单次除法调用中指定小数位数。本文用字符串构造 Decimal,说明 precision、正负数舍入、负精度和 StringFixed 展示之间的区别。475 收藏 -
Go 循环中直接 defer 会把关闭动作推迟到外层函数返回。本文用逐个处理文件的场景,说明如何缩短 defer 生命周期,并用命名返回值保留 Close 错误。475 收藏 -
Go runtime/metrics 的 Sample.Value 不能直接按一种数值类型读取,应先用 Kind 判断 KindBad、KindUint64、KindFloat64 或 KindFloat64Histogram,再调用对应方法。本文说明类型分派、未知指标处理和复用采样切片时的边界。475 收藏 -
Go 服务端可以在 ClientHelloInfo.SupportedVersions 中读取客户端声明支持的 TLS 版本,但它不是最终协商结果。本文说明回调读取、TLS 1.2 以下版本的推导边界、服务端 MinVersion/MaxVersion 的交集判断,以及握手完成后用 ConnectionState.Version 确认最终版本。475 收藏 -
从字段缺失、零字节文件、读取游标和写入失败区分Go multipart上传为空的原因,给出FormData最小提交和本机临时落盘诊断代码,比较解析大小与复制字节数。475 收藏 -
Go go toolchain 配置没有生效时,先检查当前目录、GOTOOLCHAIN 来源以及 go.mod、go.work 的 go/toolchain 行,再按优先级清理覆盖配置。本文给出一套从现象到最小确认的排查顺序。475 收藏 -
用 AppendFormat 直接向字节缓冲追加时间,结合日志批次说明容量复用、返回值、写入错误及同步与异步消费的所有权边界。475 收藏 -
Go 嵌入类型出现同名方法时,提升方法会因选择器歧义而不进入 go/types.MethodSet。本文用最小示例说明嵌入深度、显式调用和静态分析中的修复边界。475 收藏