Go语言技术文章
-
Go 1.20 引入的 errors.Join 可以把多个失败原因合成一个可匹配的错误。本文用批量校验和并发收口示例,说明遍历顺序、errors.Is/errors.As 的匹配边界,以及如何输出不丢信息的日志。150 收藏 -
用 Go embed.FS 读取内嵌模板时,路径必须是相对且规范化的 slash 路径。本文从路径校验、fs.ReadFile 错误分层和测试验收三个角度,给出可直接落地的安全读取函数。149 收藏 -
用 Go os.DirFS 暴露静态资源或模板目录时,关键不是把绝对路径换成相对路径,而是确认 io/fs 的 ValidPath 约束、根目录语义和测试边界。本文用一个最小文件服务示例拆开这些判断。148 收藏 -
reflect.Value.Comparable 用来先判断值是否具备 Go == 比较条件。本文从接口值和 slice、map 等不可比较类型出发,说明安全比较的写法、panic 边界与迁移检查点。148 收藏 -
Go regexp 的 FindAllString 适合一次拿到全部匹配,但重复匹配、空匹配和 n 参数经常让结果数量出乎意料。本文用可运行示例拆解扫描游标与边界,并给出限制匹配次数的可靠写法。147 收藏 -
用 Go 标准库 netip.Prefix 判断 IP 是否属于网段,拆开 ParsePrefix、Masked、Contains 和 IPv4/IPv6 边界,给出可直接运行的校验代码。146 收藏 -
Go 1.24 新增的 crypto/rand.Text 适合生成密钥、令牌等随机文本。本文从 rand.Text 的内部调用链出发,说明 RFC 4648 Base32 字符集、固定长度、128 位随机性与错误处理边界。146 收藏 -
slices.Replace 会在原切片的底层数组上替换 s[i:j],但替换项数量变化时结果长度、容量和尾部清零规则都会变化。本文用一个可运行的小实验拆开它的索引边界、共享数组和收缩后的内存安全行为。146 收藏 -
Go map 直接读取时,缺失键和真实的零值会得到同一个结果。本文用 ok 语法、comma-ok 判断和 nil map 示例,说明如何区分存在性、避免误判,并把判断边界写进函数接口。145 收藏 -
Golang · Go教程 | 2天前 | WEB开发 · golang · go · net/http · ServeMux · Go 模式匹配 路由冲突 http.ServeMux PathValue
Go 1.22 扩展了 http.ServeMux 的方法、通配符和优先级规则。本文用最小可运行示例排查重叠模式、405 响应和 PathValue 取值,给出注册阶段与请求阶段的验证清单。144 收藏 -
Golang · Go教程 | 2天前 | go · web安全 · net/http · CSRF · Go 1.25 · Go csrf Go 1.25 http.CrossOriginProtection 跨源请求
Go 1.25 的 net/http 新增 CrossOriginProtection,本文从浏览器请求边界、Handler 接入、可信来源配置和 403 验收入手,拆解它适合解决什么问题以及哪些请求不能误放行。143 收藏 -
json.RawMessage 适合把 JSON 解码延后,但 MarshalJSON 与 UnmarshalJSON 的字节所有权规则不同。本文用最小代码说明何时会复制、何时只是复用已有字节,以及如何避免修改底层切片带来的隐蔽问题。143 收藏 -
fs.WalkDir 面向抽象文件系统,filepath.WalkDir 面向本机文件路径;两者共享 DirEntry 回调,却在路径格式、数据来源和测试方式上有关键差异。本文用同一项目录扫描任务拆开选择边界,并给出可验证的代码写法。143 收藏 -
Golang · Go教程 | 1天前 | 标准库 · golang · JSON · 配置管理 · go · 工程实践 · 空值处理 encoding/json Go教程 MarshalText encoding.TextMarshaler 配置序列化
同一个配置值如果在 JSON、日志和环境变量之间各写一套转换,很快就会出现格式漂移。本文用 encoding.TextMarshaler 统一文本表示,拆开 json.Marshal 的调用规则、指针接收者、错误处理和 nil 边界,并给出可运行的验证示例。142 收藏 -
Go 里用 sort.Slice 和 sort.SliceStable 排序时,真正容易忽略的是相等元素的顺序与 less 比较函数约束。本文用一组带优先级和序号的记录,演示两者差异、稳定排序的适用边界和可复查写法。142 收藏