Go 实现按行读取文件:3 种方法+避坑指南
在做日志分析工具时,一开始用ioutil.ReadFile把整个日志文件读进内存再按行分割,测试小文件没问题。
上线后遇到几个 10GB 的超大日志,直接触发内存溢出。
在做日志分析工具时,一开始用ioutil.ReadFile把整个日志文件读进内存再按行分割,测试小文件没问题。
上线后遇到几个 10GB 的超大日志,直接触发内存溢出。
上周开发时,用 Go 的 html/template 渲染列表页面,明明在代码里传了 User 结构体数据,tpl 模板里却始终读不到 name、age 这些字段,控制台还没明确报错,页面只显示空值。
用最常规的 for range 遍历切片修改数据——明明代码里改了字段值,打印切片却还是原来的数据。
这是 Go 切片的“值传递”机制在搞鬼,这也是新手遍历切片修改时最容易踩的坑。
之前开发系统时,既要绑定本机指定IP启动服务,又要记录每个请求的访问来源 IP,踩了不少坑——比如本机多网卡时拿到无效的回环地址,部署到服务器后因反向代理拿到的是代理 IP 而非真实访问 IP。
最近遇到个需求:生成的单号必须是 10 位数字,不足的话在前面补 0。
比如数字 123 要变成 “0000000123”,
当时试了几种方法,有的处理不了大数字,有的遇到负数就出错。
其实 Go 里前置补 0 的场景很常见,像编号生成、数据格式化都要用。
go 的切片删除逻辑有隐藏bug——遍历删除重复元素时存在漏删,排查后才发现是遍历顺序没处理好。
其实 Go 的切片因为是动态数组,删除元素不像其他语言的集合那样有现成方法,稍不注意就会踩坑。