Go 如何正确解析 HTTP Body GZIP 数据
对方接口返回的 HTTP Body 用 GZIP 做了压缩,go 直接用 ioutil.ReadAll 读取后转 JSON,就会一直报 “invalid character ‘�’ looking for beginning of value”。
对方接口返回的 HTTP Body 用 GZIP 做了压缩,go 直接用 ioutil.ReadAll 读取后转 JSON,就会一直报 “invalid character ‘�’ looking for beginning of value”。
可能有人会问:“直接看代码行数不就行了,为什么要动态获取?” 其实在实际开发中,调用者信息的动态获取有很多关键场景:
日志定位:在通用日志工具中打印调用者方法名和行数,比如封装一个 LogInfo 函数,无论在哪个方法中调用,都能自动标注来源,调试时不用再逐行找日志位置;
刚接手Go项目时,遇到过一次生产环境报错——日志只打印“查询用户失败”,没有任何调用链路信息。
翻了半天代码才定位到是数据库查询的子函数抛错。
打印错误 error 日志时,仅有错误信息,没有错误代码的堆栈信息,这在问题排查上比较困难,具体代码如下
最近在对接第三方接口时,突然收到一串报错——“json: invalid character ‘i’ looking for beginning of value”。
一开始以为是接口返回格式变了,翻了半小时文档没发现问题,后来打印待解析内容才找到根源。
很多人觉得“程序退出就是停掉进程”,但对后端服务来说,粗暴退出会引发一系列问题。在生产环境中,“怎么退出”直接影响系统稳定性。
简单来说,优雅退出是指程序在收到退出信号后,不立即终止,而是先完成一系列准备工作再安全退出,核心要做这几件事:
最近在做一个 Golang 项目的列表分页功能时,用 GORM 的 Count 方法统计总数突然报了 “sql: no rows in result set” 错误。
本以为是简单的空数据问题,折腾了小半天才找到根因,索性整理成笔记分享给踩过同款坑的朋友