Go语言技术文章
-
Go fs.WalkDir 不会自动进入目录中的符号链接目标,但 root 自身是符号链接时会以目标作为遍历起点。本文拆开这两个边界,说明如何在回调中识别链接并按业务策略显式处理。216 收藏 -
Go 的 os.CreateTemp 固定按 0600(受 umask 影响前)创建临时文件,因此权限比 0644 严格通常是正常语义。本文按触发信号、实际模式、受控 Chmod、回滚和跨进程排查说明怎样处理。132 收藏 -
用 Go 的 filepath.Clean、Join 和 Rel 处理用户提供的相对路径,说明 Clean 只能做词法归一化,并给出安全根目录边界判断的完整写法。393 收藏 -
Go AddDate 按业务时区增加日历日,Add 增加固定时长。用完整示例比较钟表字段、UTC 偏移和实际间隔,解释跨夏令时的差异及不存在或重复时刻的边界。481 收藏 -
Go time.Parse 遇到不带时区的字符串时会按 UTC 解释,这不是读取机器本地时区失败,而是标准规则。本文用 ParseInLocation 指定业务时区,并用 Location、Zone 和 Unix 对比确认结果。335 收藏 -
Go 测试里的 ticker 泄漏,常见根因不是 Stop 单独缺失,而是 goroutine 一直阻塞在不会自动关闭的 ticker.C 上。本文用 done、Stop 和 WaitGroup 给出完整收尾方式。210 收藏 -
Go 的 encoding/json 把 JSON 数字写入 int 时,如果数值超出目标类型范围,会返回 UnmarshalTypeError,而不是自动截断或安全放大。本文从溢出边界、错误定位、字段设计和 UseNumber 四个角度说明怎样处理。451 收藏 -
Go 1.22 及更高版本可以用 http.Request.SetPathValue 在单元测试中注入路径变量,再通过 PathValue 让处理器按生产代码读取。本文区分处理器测试与 ServeMux 路由测试,并说明空值、覆盖和编码边界。496 收藏 -
Golang · Go问答 | 3星期前 | 结构体 · JSON · 指针 · go · 接口设计 · encoding/json · encoding/json 结构体字段 可选字段 指针字段 字段缺失 Go JSON null
Go encoding/json 处理 JSON null 时,指针字段会变成 nil,而普通结构体字段通常保留原值。本文用复用旧对象的最小示例拆开字段缺失、显式 null 和具体对象的差异,并给出可选字段与三态接口的建模方法。272 收藏 -
Golang · Go问答 | 3星期前 | 反射 · panic · go · 类型转换 · Go strconv reflect.Value.Convert CanConvert ConvertibleTo
reflect.Value.Convert 只执行 Go 允许的类型转换,不负责把字符串解析成数字。本文说明 CanConvert 与 ConvertibleTo 的使用边界、strconv 解析文本的方法,以及 slice 转 array pointer 时必须补充的长度检查。192 收藏 -
通用字段读取逻辑经常同时遇到普通值、指针和接口包装值。本文只围绕 reflect.Value 的 Kind 与 Elem,给出安全归一化、nil 处理和按最终 Kind 读取字段的 Go 写法。230 收藏 -
Go errors.Join 会忽略真正 nil,全部成功返回 nil。通过可选检查示例解释混合输入、错误成员识别及带类型空指针的返回陷阱,并给出聚合错误的适用约定。489 收藏 -
fmt.Errorf 中的 %w 会保留底层错误并建立可遍历的错误链,%v 只把错误格式化为消息文本。本文用最小示例说明 errors.Is 找不到原始错误的原因、排查方法和自定义包装边界。453 收藏 -
Go 接口只有动态类型和动态值同时为空时才等于 nil。把值为 nil 的具体指针返回给 error,会让接口携带该指针类型,从而出现 err != nil。本文用最小示例说明原因、观察方法和正确修复方式。140 收藏 -
Go url.PathEscape 直接处理路径片段时会把斜杠编码为 %2F;如果观察到斜杠,通常是读取了解码后的 URL.Path,或混用了路径拼接与查询参数编码。本文用最小示例区分 PathEscape、QueryEscape、RawPath 和 EscapedPath。462 收藏