Go语言技术文章
-
Go 类型断言遇到 nil interface 或 typed nil 时,comma-ok 与单值断言的行为并不相同。本文用原创示例解释失败、零值和 panic 的边界。480 收藏 -
Golang · Go教程 | 4天前 | 类型断言 · Go教程 · encoding/json · JSON解析 · Go JSON解析 json.Decoder UseNumber json.Number
Go 的 json.Decoder 调用 UseNumber 后,动态 JSON 数字不再是默认的 float64,而是 json.Number。本文解释类型断言失败的原因,并给出大整数、整数和浮点数的迁移写法。263 收藏 -
Golang · Go问答 | 4天前 | interface · golang · 类型断言 · Go问答 · error处理 · nil指针 · 指针 Go error nil interface typed nil
解释 Go interface 装入 nil 指针后仍不等于 nil 的原因,拆开动态类型和值的比较规则,并给出 error 返回、类型断言与反射边界的实用处理方式。484 收藏 -
Golang · Go教程 | 4天前 | 数据类型 · Go教程 · JSON解析 · 精度处理 · Go JSON解析 float64 json.Decoder UseNumber json.Number
Go 用 json.Decoder 解码到 interface{} 时,JSON 数字默认会变成 float64。本文演示 UseNumber 如何保留数字字面量,再按需调用 Int64 或 String,避免大整数被浮点转换。427 收藏 -
Go 返回短子切片时,普通切片表达式仍会共享大数组。本文用 make+copy、slices.Clone 和 bytes.Clone 说明如何复制窗口数据,并解释三索引表达式为何不能解决内存持有问题。414 收藏 -
Go encoding/csv 中把 Reader.Comment 设为 0 就能关闭注释行过滤,让井号开头的文本回到普通 CSV 记录;文章同时说明首次读取前的配置时机、前导空白、Comma 冲突和格式错误边界。499 收藏 -
Go 切片别名共享底层数组时,append 可能覆盖另一份切片可见的数据。本文用 full slice expression 的第三个下标限制容量,并说明它对直接写入和其他别名的保护边界。257 收藏 -
Go encoding/csv 的 Comment 只识别没有前导空白的物理行首。引号字段中的 # 属于字段值,不会被当成注释;本文用代码和边界表说明三种情况的区别。105 收藏 -
Go 截取子切片后修改元素会影响原切片,根因是两个切片共享底层数组。本文用 len、cap、三下标切片、append、slices.Clone 和 copy 说明如何判断并隔离这类修改。213 收藏 -
Go encoding/csv 读取带注释行的 CSV 时,设置 Reader.Comment 即可跳过行首注释;本文同时说明前导空白、TrimLeadingSpace、FieldsPerRecord 和解析错误的处理边界。331 收藏 -
sync.Map 虽然支持并发安全,但只针对少数访问模式优化。本文从单键写一次、不同 key 并发、同键频繁覆盖、复合更新和 Range 一致性几个角度,说明什么时候应该换回强类型 map 加 RWMutex。109 收藏 -
ReuseRecord 只影响 Reader.Read 返回的记录切片是否可复用,对 ReadAll 没有把全部记录变成单行复用的效果。本文比较两种读取方式的内存边界,并给出流式处理、保留记录和错误检查的选择方法。326 收藏 -
Go 普通 map 只有在初始化后不再写入时才适合被多个 goroutine 并发读取。本文拆开读写边界,说明 RWMutex、sync.Map、所有权模型和 race 检查器的使用场景。399 收藏 -
Golang · Go教程 | 4天前 | 切片 · csv · Go教程 · encoding/csv · 异步处理 · Go encoding/csv 切片复制 CSV读取 ReuseRecord
Go 的 encoding/csv 开启 ReuseRecord 后,保存记录应复制返回的 []string 外层切片,而不是逐个重建字符串。本文说明复用边界、异步投递时机、ReadAll 差异和可直接采用的代码写法。394 收藏 -
Go 普通 map 遇到并发读写时可能触发 fatal error。本文从访问边界、锁方案、sync.Map 和 channel 所有权对比入手,给出排查与修复清单。460 收藏