Go教程技术文章
-
slog.WithGroup 应该承担稳定的命名空间,而不是替代字段命名。本文对比嵌套组、空组和自定义 Handler 的边界,给出避免 request_id、status 等属性冲突的设计方法。457 收藏 -
Go regexp 的关键不是把每次匹配都换成缓存,而是区分固定模式和动态模式:固定表达式用 MustCompile 在初始化阶段复用,动态表达式用 Compile 返回错误,并给缓存设置输入和容量边界。457 收藏 -
Go 1.27 的 bytes.CutLast 可以按最后一次分隔符拆分字节切片。本文说明它与 Cut、LastIndex 的区别、未找到和空分隔符边界,以及返回原切片视图时何时需要 Clone。457 收藏 -
Go encoding/json/v2 的 UnmarshalRead 面向单个顶层 JSON 值,不能直接当作多值流循环入口。本文用 jsontext.Decoder 与 UnmarshalDecode 逐个读取 Reader 中的 JSON 对象,并说明 io.EOF、数组封装和错误边界。457 收藏 -
Go gob 接口字段需要注册实际承载的具体类型。本文用完整消息往返示例说明两端注册、类型断言与名称冲突的排查方式。457 收藏 -
讲清 Go encoding/xml Encoder.Indent 的 prefix 与 indent 参数,演示结构体和 token 编码的可读 XML 输出,并说明 Flush、MarshalIndent 与混合文本边界。457 收藏 -
Go 的 opentype.NewFace 通过 FaceOptions.DPI 设置字体栅格化所用的每英寸点数。本文用一个最小示例说明 DPI、Size、Metrics 与绘制坐标的关系。457 收藏 -
encoding/hex.AppendEncode 适合把字节编码结果追加到已有缓冲区。本文用 EncodedLen 判断容量,拆开 dst[:0] 复用、尾部追加和切片边界,避免预留不足或误把编码结果当原始字节。456 收藏 -
用 io.Pipe 把 Go 的数据生成器直接接到 HTTP 请求体,边编码边上传,不落地临时文件,并正确处理关闭、取消和错误传递。456 收藏 -
同一仓库维护多个 Go 模块时,可以用 go.work 的 use 指令共享本地开发版本。本文说明如何初始化工作区、验证本地解析、区分 go.work 与 replace,并让 CI 用 GOWORK=off 回到独立模块测试。456 收藏 -
用 Go multipart.Reader 按字段名设置上传上限,借助 limit+1 字节检测超量,并清理临时文件与请求级资源。456 收藏 -
Go database/sql 读取多个 SQL 结果集时,要在每组内部用 Rows.Next 遍历行,当前组结束后用 NextResultSet 切换,并在每次切换后重新调用 Next;本文给出两层循环、空结果集和错误处理写法。456 收藏 -
Go map 判断指定键是否存在,要使用 comma-ok 双值写法;本文用最小示例说明零值、缺键、nil map 与并发访问的边界。456 收藏 -
Go mime.TypeByExtension 需要传入带点的文件扩展名,未知映射返回空字符串,并可能受到系统 MIME 数据影响。本文从文件名提取、大小写处理、自定义映射和上传安全边界四个方面说明如何正确使用。456 收藏 -
Go 使用 x/text/message Printer 配合 language.Tag 输出地区化数字。本文比较 Printer、fmt 和显式格式化的适用边界,说明 Printf、Sprintf、%d、%f、%g 以及 # 标记的选择。456 收藏