Go语言技术文章
-
Go encoding/csv 可以用 Reader.Comment 忽略指定格式的注释行,连续分隔符产生的空字段仍会保留为字符串空值。本文给出逐条读取、字段数约束、空白处理和解析错误的生产写法。303 收藏 -
Go bufio.Reader 读取长记录时,使用 ReadBytes 处理单字节分隔符与 EOF 尾部数据;需要业务长度上限时,用 ReadSlice 分片复制并在追加前限制累计字节数。266 收藏 -
Go 的 os.ReadFile 会把完整文件返回为 []byte。本文从内存边界出发,说明什么时候继续使用它,什么时候改用 os.Open、io.Copy、io.LimitReader 或有界逐行读取。272 收藏 -
io.MultiWriter 会按顺序把同一份数据写给多个 Writer;任一 Writer 返回错误就停止后续写入,短写则转换为 io.ErrShortWrite。本文说明部分成功、失败传播与补偿设计的边界。112 收藏 -
Go time.After 放在 select 循环里会在每轮创建新的 Timer。本文解释持续就绪分支下的定时器积压、Go 1.23 的垃圾回收变化,以及如何用一个可复用的 time.Timer 配合 Stop、排空和 Reset 降低分配压力。143 收藏 -
go work sync 面对的是工作区构建列表,不是任意单模块整理命令。本文用 go.work、GOWORK、use 模块和最小版本选择说明它何时会改写 go.mod,以及没有变化时该检查什么。198 收藏 -
Go reflect.TypeFor 适合在泛型代码中获取编译期已知类型的 reflect.Type;动态值仍应使用 reflect.TypeOf。本文用注册表示例说明两者的选择、接口边界和兼容注意事项。218 收藏 -
Go 1.23 的 slices.Chunk 返回的是源切片的连续子切片视图:直接改元素会影响原切片,但每个分块的容量被限制为长度,append 不会沿用这段容量改写源数据。需要独立分块时使用 slices.Clone。337 收藏 -
range over function 是 Go 1.23 才支持的语言语法。本文用最小迭代器示例说明旧版编译器为何无法靠升级依赖获得这项能力,并给出升级工具链、callback 回退和构建约束的选择。269 收藏 -
说明 Go ast.PreorderStack 如何把祖先节点栈传给回调,解释 stack 不含当前节点、返回 false 跳过子树和初始栈参数的边界,并对比 Preorder 与 Inspect。341 收藏 -
Go 1.20 起普通接口可满足 comparable,但受 any 约束的类型参数、附加方法与不可比较动态值仍有不同边界。结合集合示例区分编译错误、运行时风险与业务键设计。123 收藏 -
Golang · Go问答 | 15小时前 | 并发 · 标准库 · go · 性能 · 运行时 · Go 性能排查 运行时指标 runtime/metrics.Read metrics.Sample
Go runtime/metrics.Read 可以复用同一个 []metrics.Sample,但要区分串行采样、并发底层内存和直方图深拷贝边界。本文给出可落地的定时采样写法。472 收藏 -
Go unsafe.Pointer 本身不是 GC 失效的同义词,真正危险的是把地址转成 uintptr 后脱离指针语义长期保存,或在外部调用边界提前失去对象引用。本文按转换、生命周期、cgo 与排查边界说明安全写法。149 收藏 -
Go 的 http.Request.Cookie 查找不到目标 Cookie 时返回 http.ErrNoCookie;Cookie 存在但 Value 为空时仍会返回 Cookie 指针。本文按错误、指针和值三层说明判断顺序,并补充同名 Cookie 的处理边界。251 收藏 -
Go defer 会立即求值并保存函数值、接收者和参数,延迟执行函数体。通过日志、耗时、切片和文件关闭示例,说明如何选择入口快照、最终状态与资源绑定。322 收藏