Go语言技术文章
-
go vet 的 printf 分析器不是按函数名猜测所有自定义格式函数,而是依赖包装函数推断或显式声明。本文解释自动识别失效的常见边界,并给出 if false 绑定与 -printf.funcs 两种稳妥处理方式。275 收藏 -
Go 的 http.Header 用小写字符串调用 Get 也可能成功,因为 Get 会把查询键规范化;但直接用小写键构造 map 时,直接索引与 Get 查找的键并不相同。本文用对比示例拆清这条兼容边界。275 收藏 -
围绕 Go time.Parse 与 time.ParseInLocation,说明带 Z、数值偏移和时区缩写的字符串如何选择布局,给出可复用的解析代码与排错清单。275 收藏 -
Go 的 text/template 与 html/template API 很像,但输出边界不同:日志和邮件纯文本使用 text/template,浏览器 HTML 使用 html/template。本文用一个最小渲染项目对比普通文本、HTML 文本节点和 href 属性中的转义结果,并说明 template.HTML 的信任边界。275 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 键。要让接口在字段拼错或协议漂移时立即报错,可以使用 json.Decoder 并调用 DisallowUnknownFields,同时再解码一次确认请求体没有第二个 JSON 值。275 收藏 -
Go 的 //go:fix inline 不会盲目把带副作用的实参替换进函数体。源码级内联器会分析求值顺序和次数,必要时保留显式参数绑定。本文用原创示例说明风险、工具策略与迁移验收方法。275 收藏 -
用 Go 的 fs.FS 抽象统一前端资源访问,开发期读取本地目录,发布期切换到 embed.FS,兼顾热更新、路径安全、缓存和测试。275 收藏 -
Go 的 URL.Path 是解码后的路径语义,EscapedPath() 面向转义表示;本文用 %2F 示例说明路由匹配、日志记录和请求拼接时该怎么选。275 收藏 -
Go base64.NewEncoder 写入成功不代表尾部已输出。文章解释三字节分组与尾部缓冲,给出检查 Copy、Close 错误的封装,区分编码器、缓冲层与文件收尾,并补充尾部长度测试与无填充编码边界。275 收藏 -
Go 模块解析遇到某个已知不能加载的版本时,可以在主模块 go.mod 中用 exclude 精确排除 module@version,再观察解析器是否选择更高可用版本。本文同时说明它与 replace 的边界,以及为什么不会改写下游模块。275 收藏 -
Go 中给 net.Resolver 设置 Dial 后仍访问默认 DNS,通常不是地址写错,而是当前平台没有选择 Go 内置解析器。本文解释 Resolver.Dial 与 PreferGo 的组合边界,并给出接入 HTTP Transport、处理平台差异和保留回退路径的写法。275 收藏 -
Go 时区缩写解析成功不代表偏移正确。本文解释 Parse 的本地时区依赖与未知缩写回退,给出显式地区解析旧输入、RFC3339 数字偏移交换新数据的写法及边界。275 收藏 -
Go 项目同时存在 vendor 和 module cache 时,构建到底读取哪份依赖?本文用 go env、go list 和 -mod 参数定位选择模式,解释 GOFLAGS、go.mod 版本与 vendor/modules.txt 的关系。275 收藏 -
Go context.WithoutCancel 可以保留父 context 中的请求级值,同时切断取消信号。本文用收尾任务示例说明它的语义、独立超时写法、适用边界和常见误区。275 收藏 -
Go sync/atomic 的 atomic.Pointer 可以原子地发布配置指针,但不会替调用方完成对象字段初始化。本文从半初始化现象出发,定位提前 Store、发布后继续修改以及嵌套引用复用造成的问题,并给出不可变配置快照的修复写法。275 收藏