Go语言技术文章
-
nats.Connect连不上JetStream是因服务端未启用,需加-js参数或配置jetstream块;js.Publish失败、消息丢失、重复消费等问题均源于JetStream未正确配置和使用。112 收藏 -
反射赋值前必须确保字段可寻址、导出、类型匹配且非空指针:需传指针并调用Elem(),字段名首字母大写,Set方法须与字段类型严格一致,指针/嵌套字段需手动解引用并判空。111 收藏 -
Go的http.ServeMux不支持运行时增删路由,因其路由表是只读快照;需用支持原子切换的可变路由方案,如gorilla/mux配合指针替换,或自实现基于sync.RWMutex和atomic.StorePointer的不可变RouterTable。111 收藏 -
使用Golang实现备份恢复系统,先通过filepath.Walk递归复制文件到目标目录实现备份,再结合archive/tar和compress/gzip将目录压缩为tar.gz格式节省空间,利用robfig/cron库设置定时任务每日自动执行备份,最后通过解压tar.gz文件并还原目录结构完成恢复,支持完整文件级备份与恢复功能。111 收藏 -
Go原生map已足够高性能,除非有极特殊需求(如固定大小、零分配、精确控桶),否则应优先使用;其底层经多年打磨,支持动态扩容、负载因子自动控制、溢出桶管理及多键类型专用哈希路径,百万级数据下Get/Put仍稳定在纳秒级。111 收藏 -
在Martini中使用命名参数路由(如/edit/:id)时,HTML中的相对路径引用(如assets/css/...)会被浏览器解析为相对于当前URL路径,导致静态文件404;正确做法是统一使用以/开头的根路径(如/assets/css/...),确保静态资源始终从站点根目录加载。111 收藏 -
最推荐使用github.com/goburrow/serial:API简洁、无CGO依赖、全平台支持、错误处理清晰;需显式配置Address、BaudRate等参数,读写阻塞需配合context或goroutine控制超时,Linux权限问题须加dialout组。111 收藏 -
os.Seek的offset从哪算取决于whence参数:SEEK_SET从文件开头、SEEK_CUR从当前位置、SEEK_END从文件末尾;非寻址设备不支持Seek,多goroutine共用*os.File时Seek会相互干扰。111 收藏 -
slog默认不支持级别过滤,需自定义Handler实现:通过LevelFilterHandler包装标准Handler,在Handle方法中判断rec.Level>=minLevel决定是否输出。111 收藏 -
Golang · Go教程 | 1星期前 | 中间件 · HTTP · recover · Go教程 · 日志排障 · recover panic 结构化日志 HTTP中间件 request_id Go教程 接口排障
从 Go HTTP 接口偶发 500 和 panic 堆栈入手,逐层补上请求 ID、recover 中间件、统一 JSON 错误、结构化日志和反向验证清单,避免服务崩溃且便于定位问题。111 收藏 -
GoHTTP服务需手动设置CSP头,注意单引号包裹值、分号分隔、禁用unsafe-inline/eval;动态nonce须每次请求生成并同步模板与响应头;第三方库如unrolled/secure仅支持静态策略;调试应检查响应头是否存在及语法正确性。110 收藏 -
Go使用IEEE-754双精度浮点数表示小数,导致部分十进制数(如1.021)无法精确存储,乘法后取整可能产生意外截断(如1020而非1021)。110 收藏 -
模块缓存默认开启,自动存储解压校验后的模块副本于GOMODCACHE(默认$GOPATH/pkg/mod),gobuild等命令自动复用;需避免CI中误清缓存或错误配置路径。110 收藏 -
Go中没有全局对象,只有包级变量,须在函数外用var声明,首字母决定导出性;多文件初始化顺序不可控,应避免跨文件依赖;并发读写需同步;推荐用sync.Once单例替代init()硬初始化。110 收藏 -
goroutine泄漏是并发性能下降的头号原因,表现为Mallocs持续上涨、Goroutines数卡在高位;常见于time.After轮询未改用Timer.Reset,以及channel读写不配对导致阻塞。110 收藏