Go语言技术文章
-
fs.Sub 不会改写原始 embed.FS,也不会修改 HTTP 路由。本文区分嵌入路径、子文件系统相对路径和 URL 前缀,解决读取与遍历时目录前缀重复的问题。430 收藏 -
介绍 Go strconv.AppendInt 拼接数字字段的实用写法,说明缓冲区容量、进制、类型转换、切片返回值和并发复用边界。430 收藏 -
Go 的 BuildInfo.Settings 是按实际构建条件写入的稀疏键值列表,VCS 字段会因关闭 buildvcs、缺少仓库或工具、模块与仓库目录不匹配等情况而缺失。本文给出判断方法与容错读取代码。430 收藏 -
用 Go 的 mime.WordDecoder.DecodeHeader 解码 RFC 2047 邮件主题,区分 Decode 与 DecodeHeader,配置 CharsetReader,并排查未知字符集和地址解析边界。430 收藏 -
Nil UUID 是 RFC 定义的特殊 UUID,也是 Go 中 uuid.UUID 的零值,但它并不自动等于业务缺失。本文从实体主键、可选关联、API 与数据库边界给出可落地的判定和建模规则。430 收藏 -
filepath.WalkDir 遇到权限目录时,错误会通过回调参数传入,而不是自动跳过。本文区分入口访问失败与子目录读取失败,说明 d 和 err 的判断方式,以及 return nil、filepath.SkipDir 和原样返回错误的取舍。430 收藏 -
Go regexp 会把无效 UTF-8 输入中的异常字节按 utf8.RuneError 处理,而不是保留原始字节。本文对比先拒绝、规范化后匹配和改用 bytes 做字节级查找三种方案,帮助你按数据边界选对实现。430 收藏 -
Go Lip Gloss 的 Width 是应用 Margin 前的块宽度,Padding 和 Border 都会占用这段空间。本文按内容区、框架开销和终端单元格测量拆开计算,并整理中文文本、超宽内容与回退排查方法。430 收藏 -
bufio.Writer 写入成功不代表数据已提交给文件。本文说明关闭前 Flush 的正确位置、写入与关闭错误的保留方法,以及 Flush 和 Sync 的区别,给出不覆盖已有文件的报表写入示例。430 收藏 -
Go 的 replace 会改变依赖内容和模块图,但不会单独完成版本选择。本文用 go list -m all、go env GOWORK 和最小 go.mod 示例,定位版本不一致并区分本地开发与正式构建配置。430 收藏 -
说明 math/bits.Len64 返回有效位数而不是最高位下标,覆盖零值边界、下标换算、uint64 类型保留和常见误用。430 收藏 -
Go x/text/encoding/unicode 的 ExpectBOM 会要求 UTF-16 输入以 BOM 开始,没有签名的字节流会返回 ErrMissingBOM。本文对比三种 BOMPolicy,演示解码、编码和 transform.Reader 的正确使用边界。430 收藏 -
本文用一个最小 Go 结算示例说明 shopspring/decimal 如何通过 RoundBank 实现银行家舍入,涵盖字符串金额解析、保留两位小数、中点取偶数、负数与 StringFixed 展示边界。430 收藏 -
使用 Squirrel Eq 构造可选筛选条件,通过完整函数区分省略、false、0、SQL NULL 和 IN 列表,并说明固定列名、占位符及 SQL 与 args 配对的边界。430 收藏 -
Golang · Go教程 | 1星期前 | 错误处理 · go · encoding/json · Go errors.Is errors.As Unwrap json.MarshalerError
json.Marshal 调用自定义 Marshaler 失败时会包装为 MarshalerError。本文用一个可比较的底层错误演示 Unwrap、errors.Is 和 errors.As 的组合处理方式。430 收藏