Go教程技术文章
-
Golang · Go教程 | 1星期前 | 标准库 · 数据库 · Go教程 · NullString · 数据读取 · Go database/sql sql.NullString sql.Null[string]
Go 使用 database/sql 查询可空字符串时,普通 string 不能直接接收 SQL NULL。本文通过 sql.NullString、Rows 多行扫描、Go 1.22 的 sql.Null[string] 和 COALESCE 对比,说明如何保留或转换 NULL 语义。152 收藏 -
用 SyntaxError、UnmarshalTypeError 和 Decoder.InputOffset 区分 JSON 错误口径,并把字节偏移、字段路径、原始片段和业务记录写进可检索日志。152 收藏 -
Go 项目从 fmt.Println 走向结构化日志后,标准库 slog、zap 和 zerolog 都能完成 JSON 输出,但默认行为、扩展方式、性能与迁移成本并不一样。本文按项目约束比较三种方案,并给出可落地的选择规则。151 收藏 -
用一个可复现的超时清理场景,说明 context.AfterFunc 的回调时机、Stop 返回值和幂等清理边界,给出可运行的 Go 示例与并发回归检查。151 收藏 -
govulncheck 报告中的 symbol 不是普通关键词,而是漏洞函数或方法在项目调用图中的落点。本文从源码扫描开始,演示如何区分导入命中、真实可达调用和分析边界,并用 traces 与 JSON 固化排障证据。151 收藏 -
在 Go 网页模板中安全输出表单、评论或搜索词,关键是使用 html/template,让普通字符串按所在 HTML 上下文自动转义,并谨慎处理 template.HTML。151 收藏 -
Go select 本身不会提供缓冲空间,带缓冲 channel 负责排队,default 负责满载时立即降级。本文用一个可复用的发送函数说明丢弃、阻塞和退出控制的边界。151 收藏 -
Go encoding/gob 传递接口值时,必须让发送端和接收端注册相同的具体类型。本文用可运行的原创示例说明 gob.Register、接口地址、指针和值类型及 RegisterName 的边界。151 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · 命令行 · go · 工程实践 · 参数解析 · Go 子命令 flag.FlagSet NewFlagSet ContinueOnError
Go 的 flag.FlagSet 适合把 start、stop、config 等子命令拆成彼此独立的参数集合。本文从参数隔离开始,说明 ContinueOnError、Usage、Parse 和错误码如何组合,并给出可运行的最小命令行程序。150 收藏 -
Go PGO 没有明显收益时,从生产 profile 的代表性、合并采样时长、default.pgo 位置和 -pgo 对照构建四个边界逐层排查。150 收藏 -
Go 中使用 bufio.Reader.Peek 查看协议头或下一行前缀而不推进读取位置,本文说明逐步探测、切片复制、长行和 ErrBufferFull 的处理边界。150 收藏 -
围绕一个 map 值从创建、写入、读取到删除的完整生命周期,解释 nil map 与空 map 的差异、并发访问为何需要同步,以及如何用最小检查确认修复有效。149 收藏 -
Go 中不要把 URL 当普通字符串拼接:路径片段用 URL.JoinPath,查询参数用 url.Values,并且每个动态值只在所属语义层编码一次。149 收藏 -
Go 的 ZIP 条目名本来就使用正斜杠表示层级,但不能把名称直接拼到解压目录。本文用 archive/zip、filepath.IsLocal 和 filepath.Localize 还原目录结构,并区分目录条目、文件名编码与读取错误。149 收藏 -
用 Go log/slog 的 Logger.With 在请求入口固定 request_id、method 和 path,再把派生 Logger 传入服务层,让 JSONHandler 输出一致的请求属性,并避开全局污染与敏感字段泄露。149 收藏