Go教程技术文章
-
slices.Grow 不是无条件提速开关。本文用批量追加日志事件的场景,拆开容量预估、底层数组复用、负数参数和基准验证,给出可以落地的使用边界。206 收藏 -
Go reflect 中 ConvertibleTo、AssignableTo、CanConvert、CanSet 与接口断言职责不同。本文用命名类型、接口字段和动态值示例说明转换、赋值与断言的边界,帮助反射代码减少 panic。206 收藏 -
本文演示 Go base32.NewDecoder 如何配合 io.CopyBuffer 流式解码大文件,并补充编码一致性、大小限制、错误处理和临时文件提交。206 收藏 -
用 go/parser 生成 Go AST,再用 ast.Preorder 以迭代器形式完成深度优先前序遍历;同时比较 Inspect 与 PreorderStack 的控制边界,并处理解析错误、节点筛选和源文件位置。206 收藏 -
Go netip.Addr.As16 会把 IPv4、IPv6 地址统一转换为 [16]byte。本文说明 IPv4 映射形式、IPv6 区域标识、零值 Addr,以及什么时候应该改用 As4 或 Unmap。206 收藏 -
Go encoding/xml 的 Decoder.Skip 可以在已经读到目标 StartElement 后消费完整嵌套子树,让流式解析继续到下一个同级节点。本文说明调用前提、游标位置、错误处理,以及 Skip 与 DecodeElement 的取舍。206 收藏 -
本文从 root: 请求路径的实际问题出发,用 bytes.CutPrefix 解析协议前缀,再交给 Go 1.24 的 os.OpenRoot 和 Root.Open 读取受限根目录中的文件,并说明错误与关闭边界。206 收藏 -
本文用 Go net/http ServeMux 组织方法、路径和命名通配符,说明路由优先级、PathValue 参数读取、冲突边界与旧版本兼容写法。205 收藏 -
Go PGO 的关键不是随便拿一份 CPU profile,而是让 profile 代表真实工作负载。本文从采集范围、统一采样窗口、多实例合并到 default.pgo 和 -pgo 构建,整理一套可以持续更新的准备方法。205 收藏 -
把 C.CString 看成 C 堆上的临时副本:同步调用在分配后立即 defer C.free,C 侧长期保存时按明确的销毁契约释放,C.GoString 复制完成后再回收。205 收藏 -
Go 的 json.SyntaxError.Offset 表示解析器读过的字节数。本文用 error.As 取出语法错误,安全截取错误附近内容,再把字节偏移换算成行列位置,并区分 SyntaxError、InputOffset 与类型错误的适用边界。205 收藏 -
Go text/template 输出空字符串不一定是字段缺失。本文区分 map 缺键、空字符串和结构体零值,并用 missingkey=error、hasKey 与 index 给出可执行的排查和处理方式。204 收藏 -
Go 的 url.Values.Encode 会按 key 排序并完成 URL 编码,但不会替你制定完整的签名协议。本文说明重复参数、特殊字符和签名字段如何纳入同一份规范化字符串。204 收藏 -
Go text/template 的 missingkey 不是统一的必选项:default 保留兼容行为,zero 返回元素类型零值,error 让 Execute 立即失败。本文按模板用途给出选择方法和落地清单。204 收藏 -
Go 批量任务如果靠定时轮询检查状态,既浪费唤醒次数又难以处理关闭流程。本文用 sync.Cond 把状态检查、等待和批量唤醒组织起来,并说明 Signal、Broadcast 与退出条件的选择。204 收藏