Go问答技术文章
-
解释 Go 循环中的 defer 为什么不会在每轮迭代结束时执行,并给出局部函数封装资源释放的实用写法。436 收藏 -
Go 中把 nil 指针作为 error 返回后,接口会保留具体动态类型,因此 err 可能不等于 nil。本文用代码说明 typed nil 的形成原因、成功分支的正确返回方式,以及类型断言排查时的边界。313 收藏 -
nil指针装入接口后仍带动态类型,因此接口与nil比较可能为false。本文沿指针创建、接口承载和error返回边界解释差异,给出成功显式返回nil的写法,并说明类型断言、方法调用和清空变量的边界。373 收藏 -
Go slice append 后原切片内容被覆盖,通常是因为派生切片与原切片共享底层数组且仍有备用容量。本文用最小示例说明 len、cap、三下标切片与 copy 的选择边界。289 收藏 -
Go 临时文件删除失败时,关键不是无限重试 Remove,而是先关闭文件句柄、保留主流程错误,再按 PathError 判断权限、路径和生命周期问题。299 收藏 -
Go map 不是并发容器,多个 goroutine 无同步地读写同一个 map 时可能触发 concurrent map read and map write 或 concurrent map writes。本文说明根因,并比较普通 map 加 RWMutex、sync.Map 与 channel 所有权模型的适用边界。284 收藏 -
filepath.Glob遇到非法模式会返回ErrBadPattern,忽略err才容易误认为普通空结果。本文给出最小错误处理写法,区分无匹配与目录读取问题,并说明相对路径、星号和跨平台转义的边界。417 收藏 -
Go os.Open 失败时返回的是错误和不可用的文件对象,不能继续 Read、Stat 或 Close。本文说明先判错再使用的写法,解释 PathError 的原因识别,以及成功打开后如何安全管理 Close。234 收藏 -
Go os.Stat 失败时不要只比较错误字符串:用 errors.Is 区分文件不存在与权限拒绝,再从 PathError 提取操作和路径信息,覆盖中间目录不可访问等排障边界。195 收藏 -
ReadString在EOF时可能同时返回非空数据,过早退出会丢掉没有换行的末段。本文提供带状态的消费函数,区分空文件、空行、正常末段和读取异常,并说明CRLF、资源责任与实时追加输入的不同约定。203 收藏 -
Go 的 math.Signbit 判断浮点数符号位,因此能识别负零;x < 0 判断的是数值顺序,负零与零相等所以不会命中。本文用 Copysign、Float64bits 和 NaN 边界说明两种判断的使用场景。438 收藏 -
Go encoding/csv 默认按较严格的 CSV 引号规则解析。本文说明 Reader.LazyQuotes 放宽的两类引号错误、开启时机、ParseError 处理方式,以及为什么容错读取不能替代下游数据质量控制。322 收藏 -
Go encoding/xml 映射命名空间失败时,关键不是记住 XML 前缀,而是让结构体标签匹配命名空间 URI。本文用 XMLName、xml.Name 和 Decoder.Token 逐层定位字段为空的原因。127 收藏 -
Go csv.Reader.TrimLeadingSpace 只忽略字段开始处的空白,不会删除引号包裹内容内部的空格。本文用最小示例拆开引号外、引号内两种位置,并说明注释、分隔符和字段数量设置的边界。235 收藏 -
Go把JSON数字解码到通用接口时通常使用float64,部分大整数因此发生舍入。本文结合导入标识场景,比较UseNumber、int64字段和字符串契约,并说明范围错误、上游精度丢失与跨服务迁移的处理方法。323 收藏