Go教程技术文章
-
os.DirFS 可以把固定目录暴露为 io/fs,但它不是 chroot 安全边界。本文从最小读取写法、fs.ValidPath 输入约束和符号链接风险讲起,并给出 Go 1.24+ 使用 os.OpenRoot 的安全替代方案。204 收藏 -
Go 1.22 起可以用 reflect.TypeFor[T]() 直接取得泛型类型的 reflect.Type。本文用可复用示例说明结构体、切片和接口类型的获取方式,并区分 TypeFor 与 TypeOf 的边界。204 收藏 -
types.MethodSet.Lookup 按包身份和方法名查找方法,未导出方法的包路径会参与唯一标识。本文用类型检查结果构造方法集合,演示怎样命中 refresh、读取 Selection.Obj,并解释包不匹配时为什么返回 nil。204 收藏 -
Go 的 utf8.RuneError 不能单独代表非法输入:DecodeRune 对空输入返回 RuneError、size=0,对非法非空字节返回 RuneError、size=1;合法的 U+FFFD 则有正常字节宽度。本文用单点解码和整段校验两条路径说明如何准确判断。204 收藏 -
多个 signal.Notify 监听器应使用独立通道,并由各自的 signal.Stop 解除注册;不要主动关闭 Notify 写入的通道。本文从通道分发、停止顺序、NotifyContext 和幂等收尾四个方面给出可复用的 Go 优雅退出写法。204 收藏 -
encoding/json v2 的 omitzero 按 Go 零值或 IsZero 方法省略字段。本文对比 omitempty 在 nil 与空容器上的差异,并说明统一选项与反序列化边界。203 收藏 -
Go select 不会自动超时,需要把 time.After 或 time.NewTimer 放进 select,并同时处理结果、通道关闭、context 取消和后台发送阻塞。本文用原创示例说明一次等待、循环复用和生产环境的收尾边界。203 收藏 -
用 Go 的 debug/elf.File.Symbols 读取 ELF 普通符号表,处理 elf.ErrNoSymbols,并区分 Symbols 与 DynamicSymbols 的使用边界。203 收藏 -
Go 的 json.Valid 接收 []byte 并返回 JSON 语法是否有效的布尔值,适合做输入预检,但不负责把字段映射到结构体。本文用一个边界排查场景说明 Valid 与 Unmarshal 的分工。203 收藏 -
Go text/template.Option 的 missingkey 配置决定模板访问缺失 map 键时是保留默认结果、写入零值,还是让 Execute 返回错误。本文用最小示例对比三种行为,并给出升级模板调用方时的回归清单。203 收藏 -
用一个阈值查询小工具说明 Go slices.BinarySearch 的返回值、升序前提、插入位置语义和边界处理,帮助把标准库 API 组合成可复用的业务函数。203 收藏 -
Go encoding/json 解码 PATCH 或可选配置时,普通字段无法区分缺失和显式 null。本文从 RawMessage 到泛型 Nullable,说明如何识别字段状态、处理空输入并保留类型错误。203 收藏 -
url.Values 本质是 map[string][]string,直接赋值或只复制 map 仍可能共享值切片。本文用 Values.Clone 和兼容性辅助函数完成独立副本,并说明 Set、Add、Del、nil 输入与并发边界。203 收藏 -
Golang · Go教程 | 3星期前 | Go教程 · net/http · Go net/http HTTP连接 ResponseWriter http.ResponseController Hijack
Go 处理器需要接管底层连接时,可以用 http.ResponseController.Hijack 统一读取 ResponseWriter 的能力。本文说明最小调用方式、HTTP/2 与包装器边界,以及成功接管后的缓冲区和连接关闭责任。202 收藏 -
sync.OnceFunc 返回的函数不提供是否执行、执行中或初始化成功的查询接口。本文用 atomic.Uint32 设计外部状态,把可观测性与一次性执行职责分开,并处理并发读取与 panic 边界。202 收藏