Go问答技术文章
-
Golang · Go问答 | 3星期前 | JSON · Go问答 · Go encoding/json html/template JSON转义 JavaScript上下文 template.JS
Go html/template 输出 JSON 时出现 \u003c、\u0026 等转义字符,通常是模板针对 HTML 或 JavaScript 上下文的安全编码,并不代表 JSON 损坏。本文区分接口 JSON、模板对象和 script 内嵌数据的处理方式。491 收藏 -
Golang · Go问答 | 1个月前 | net/http · Go问答 · 接口安全 · 版本迁移 · ServeMux · net/http 通配符 路由冲突 ServeMux Go 1.22 PathValue
Go 1.22 改造了 net/http.ServeMux 的模式语法和优先级,旧项目迁移时最容易踩到方法覆盖、通配符冲突和大括号语义变化。本文用最小代码验证匹配规则、冲突触发条件和上线前的兼容检查。490 收藏 -
go list -m all 展示的是模块构建列表,不等于某个目标包实际编译进二进制的全部依赖。本文从模块模式、vendor、workspace、构建条件和二进制 BuildInfo 五层排查版本不一致。490 收藏 -
panicreturn 不是 Go 内置关键字,而是用命名返回值、defer 和 recover 在函数边界内把可隔离的 panic 转成 error。本文说明边界选择、goroutine 保护、资源清理和测试重点。490 收藏 -
Go encoding/xml 中,嵌套类型的 XMLName 显式标签与外层字段标签不一致会触发名称冲突。本文用固定根节点和可复用子节点两个写法说明如何稳定解码,并梳理命名空间、大小写和 Marshal 的边界。490 收藏 -
time.Time.AppendText 从 Go 1.24 起提供面向 encoding.TextAppender 的 RFC 3339 文本输出。它适合把时间追加到已有字节缓冲区,但要处理错误返回,并注意它保存的是时区偏移而不是 Location 名称。489 收藏 -
Go 用 archive/zip 生成的 ZIP 无法打开时,先检查条目写入、zip.Writer.Close 和底层输出的关闭顺序,再用 zip.Reader 区分截断、写入失败与 CRC 校验问题。489 收藏 -
Go 的 http.Client 返回响应后,Response.Body 不读取、不关闭,或每次新建 Client,都可能让 Transport 无法复用持久连接。本文用原创示例拆开 Body 生命周期、读取策略和连接池排查方法。489 收藏 -
Go 切片 append 后另一个切片内容跟着变化,通常是因为容量足够时仍共享底层数组。本文用 len、cap 和最小示例区分共享与扩容分支,并给出 copy 与 slices.Clone 的隔离写法。489 收藏 -
Go 的 File.Sync 只针对已经打开的文件描述符提交数据和文件元数据,临时文件 Rename 后的目录项仍属于父目录。本文拆分三层持久化边界,并给出 Go 的安全替换写法与平台注意事项。489 收藏 -
runtime.KeepAlive 用于让持有原生句柄的 Go 对象在指定位置前保持可达,避免 finalizer 提前关闭资源。本文给出最小写法、放置位置、适用边界与常见误区。489 收藏 -
Go 的 POST 请求第一次失败后重试,服务端却读到空 Body,通常不是服务端丢数据,而是请求体只被消费了一次。本文用 bytes.Reader、GetBody 和两次请求日志拆开这个问题,给出可验证的重试写法与边界。488 收藏 -
Go 1.21 之后,工具链版本不只由机器上的 go 决定。用 go.mod、GOTOOLCHAIN 和 CI 矩阵配合,能把自动升级、固定版本和失败回退边界讲清楚。488 收藏 -
用 Go atomic.Pointer 替换进程内共享配置时,关键不是把指针换掉,而是保证读线程拿到完整快照、发布顺序清楚且失败时能回到旧版本。本文用一份可运行的配置结构说明初始化、原子发布、校验和回滚边界。488 收藏 -
Go 1.24 为 net/http 增加 HTTP2Config 与 Protocols 配置。本文从服务端并发流限制和客户端兼容验证入手,说明 HTTP2Config 适合解决什么问题、哪些字段只对服务端生效,以及如何用最小代码确认协议协商结果。488 收藏