Go语言技术文章
-
bufio.Reader.Peek 返回长度不足时,不能只看切片长度或直接索引请求位置。本文区分 ErrBufferFull、EOF 和底层错误,说明 Peek 不推进读取位置的边界,并给出复制预览结果、再用 io.ReadFull 消费固定长度的处理方式。467 收藏 -
Go cmp.Or 适合把多个同类型候选值按优先级取第一个非零值,常用于命令行、环境变量和默认配置回退。本文说明它的用法、零值边界,以及为什么它不是字段级配置合并器。467 收藏 -
encoding/json v1 解码到结构体时会优先精确匹配,也接受大小写不敏感的字段匹配,因此 JSON 键大小写不同仍可能填充结构体字段。本文解释标签、map、DisallowUnknownFields 与严格键名预检的边界,并说明 v2 的差异。467 收藏 -
Go context 取消后下游查询仍在继续,通常不是取消函数失效,而是信号没有传到查询 API,或数据库驱动没有实现可取消路径。本文用 QueryContext、rows 生命周期和驱动边界逐层排查。467 收藏 -
Go 的 io/fs.ValidPath 只接受不带根的斜杠路径。本文用 os.DirFS 建立受限根目录,先校验文件名再用 fs.ReadFile 读取,并说明 ..、符号链接、权限和运行身份的边界。467 收藏 -
围绕 Go encoding/csv Reader.Comma 讲清单字符分隔符、非法字符、注释符冲突和 ParseError 的排查顺序,帮助把配置错误与 CSV 内容错误分开。467 收藏 -
只想替换取消或超时上下文时使用 Request.WithContext,需要隔离 URL、Header、表单等请求元数据时使用 Request.Clone;两者都不会深复制 Body。本文用中间件和出站请求场景说明选择边界。467 收藏 -
Go 的 sync.Mutex 在首次使用后不能复制。本文从值接收者、结构体赋值和容器操作定位隐式复制点,并用指针接收者与 go vet copylocks 修复。467 收藏 -
讲清 Go io/fs.Sub 如何把嵌入文件系统的子目录映射为新根,并结合 fs.ValidPath、fs.ReadFile 与业务白名单处理路径边界;同时说明它不是符号链接安全沙箱。466 收藏 -
用 Go go-vcard 保存多个 EMAIL 字段,并通过 PREF 参数指定优先邮箱;同时说明 Add、Set、PreferredValue 和 vCard 4 转换时的边界。466 收藏 -
用 Go go-echarts 配置 inside、slider 和组合缩放组件,讲清 Start、End、Throttle、FilterMode 与坐标轴绑定的选择方法。466 收藏 -
Go time.Duration.Round 会把时间间隔舍入到指定粒度的最近倍数,刚好过半时远离零点,非正粒度则原样返回。本文用紧凑示例说明它与 Truncate 的区别、字符串和毫秒输入的统一处理,以及定时器参数的边界。466 收藏 -
encoding/gob 解码到已有 map 时不会先清空目标,传入数据会覆盖同名键,未出现在流中的旧键仍然保留。本文说明合并语义、nil map 的初始化方式,以及需要替换数据时如何避免旧状态残留。466 收藏 -
Go csv.Reader 的 LazyQuotes 会放宽普通字段中的裸引号和带引号字段中的非双写引号,但不会自动修复字段数、分隔符或业务数据质量。本文按兼容入口、严格边界和回滚路径说明如何安全使用。466 收藏 -
Go unique.Handle 可直接进行相等比较。本文给出批次匹配和三组基准示例,区分字符串内容比较、句柄复用与转换成本,说明分配收益如何判断。466 收藏