Go问答技术文章
-
判断 Go os.File.WriteAt 是否完整,不能只看 err。应同时比较 n 与 len(p),区分完整写入、部分写入和异常,并保留底层错误;本文给出可复用的固定偏移写入判断函数。187 收藏 -
Go 静态分析里,TypeAndValue.IsNil 判断的是当前 AST 表达式是否指向预声明 nil,而不是运行时指针是否为空。本文用 types.Info.Types 拆解 nil、(*int)(nil) 和 p == nil 的节点边界,并说明 Type、Value 与 IsNil 的分工。187 收藏 -
Go types.Package.Path 表示包路径,Name 表示声明名,两者不能互相替代。本文从同名包索引覆盖场景出发,用示例区分本地导入别名,并说明代码生成与缓存的处理边界。187 收藏 -
Excel 日期本质上是序列数字,显示成日期依赖单元格格式。本文对比 Excelize 的原始读取、格式化读取、1904 日期系统、ExcelDateToTime 与 time.Time 写入方式,帮助你选对 API。186 收藏 -
Go mutex profile 默认不采样,先用 runtime.SetMutexProfileFraction 开启,再通过 pprof 的 mutex 数据定位锁竞争热点。本文解释采样比例、采集方式和栈信息判读,避免把 Lock 调用误当成唯一根因。186 收藏 -
Go 的 json.Decoder.Token 返回的是 JSON 词法 token,Delim 负责标出数组和对象边界,More 只用于判断当前容器是否还有元素。本文从 Token 看似错位的现象出发,说明如何用 Token、More 与 Decode 组合读取 JSON 流。186 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · 错误处理 · go · 数据库 · Go database/sql sql.ErrNoRows QueryRow QueryRowContext
QueryRow 找不到记录并不是 QueryRow 立即报错,而是把错误延迟到 Scan。本文说明 sql.ErrNoRows 的来源,比较 QueryRow 与 Query 的适用场景,并给出仓储层错误转换和边界处理方式。186 收藏 -
Go defer 写在循环里时,关闭动作通常要等所在函数返回。本文用一个批量读取小工具说明资源为何积累,并给出局部函数、错误合并与退出边界的改写方式。186 收藏 -
io.CopyBuffer只复用通用复制路径的暂存区。本文解释专用方法分派、额外分配来源,以及外部缓冲区的所有权、文件关闭与错误处理。186 收藏 -
io.Pipe 消费端提前退出后,应先用读端 CloseWithError 通知写端,再等待生产协程。本文区分两端关闭职责与错误传播,给出有限数据示例,并说明 nil、重复关闭、部分写入和上游阻塞的处理范围。185 收藏 -
Go map 的 range 顺序未指定,不能直接依赖遍历结果。本文用一个小型标准库示例收集 key、排序后回查 map,并说明按 value 排序时如何用 key 处理相同值,覆盖 nil map 与并发边界。185 收藏 -
使用 xml.Decoder.Token 读取带命名空间的 XML 时,Name.Space 保存的是命名空间 URI,而不是文档中的短前缀。本文从一个最小示例出发,说明如何按 URI 与 Local 组合匹配元素,并处理未知前缀与 RawToken 的边界。185 收藏 -
Go 文档注释中的 # 空格、缩进和空行会影响 Heading 与 Paragraph 的识别;Go 1.19 前的旧式单行标题还可能在 gofmt 后变成显式标题。本文说明识别规则、避免误判的写法,以及如何用 comment.Parser 检查实际块类型。185 收藏 -
Go 使用 encoding/base64.NewEncoder 流式编码时,尾部字符缺失通常是没有关闭编码器,导致不足 3 字节的最后一块仍留在缓冲区。本文说明正确的 Close 顺序、错误处理和验证方法。185 收藏 -
Go 交叉编译后程序无法启动,优先检查 GOOS、GOARCH、CGO_ENABLED 与动态依赖是否和目标机器一致。本文按启动症状给出一套可执行的参数排查顺序。184 收藏