Go语言技术文章
-
Go中reflect绑定flag字段panic的根本原因是flag包不支持结构体自动绑定,且未导出字段或不可寻址值会导致reflect操作panic;正确做法是仅对导出字段用field.Addr().Interface()转指针,配合flag.Var注册自定义Value实现,并递归处理嵌套结构、扁平化key。380 收藏 -
线上服务goroutine数持续上涨、内存缓慢增长、RabbitMQ消费延迟升高,八成是amqp.Channel复用不当+协程未退出导致的泄漏;根本原因是channel生命周期与goroutine退出路径未对齐,如NotifyClose通道未消费、Consume后未Cancel、Publish/Consume混用等。380 收藏 -
用SETBIT而非SET存在线状态,因位图内存仅约1.25MB(1千万用户),支持秒级统计与集合运算;需确保用户ID为非负整数偏移量、key带日期并设过期,用BITFIELD批量操作,BITCOUNT统计时注意写入逻辑与精度。380 收藏 -
runtime.NumGoroutine()返回当前存活Goroutine总数,但不表示调度器瓶颈;真正制约因素是内存与GC压力,而非Goroutine数量本身。380 收藏 -
多模块 Go 仓库本地联调顺利、CI 却找不到依赖,往往不是代码问题,而是工作区边界没有管理好。本文用一套可复用的工作流说明 go.work 的建立、验证、依赖同步和上线门禁。380 收藏 -
sql.Open()仅初始化连接池不建连,首次Query/Exec/Ping才真实建连;必须紧随其后调用db.Ping()验证连通性,否则首请求才暴露超时或认证失败。379 收藏 -
返回局部变量指针必然逃逸,编译器将其分配到堆;闭包捕获外层局部变量并返回时逃逸;指针或含指针值发送到channel也逃逸。379 收藏 -
Go进程报“toomanyopenfiles”本质是未及时关闭文件、未限制并发及系统fd配置不当;需在启动前固定系统限制,用unix.Getrlimit读取/proc/pid/limits中真实Soft值校验。379 收藏 -
Golang · Go问答 | 1个月前 | map · RWMutex · sync.Map · go并发 · Go问答 · Go channel map 并发读写 Fatal error RWMutex sync.Map
本文用完整工作流回答 Go map 并发读写为什么会崩:先复现 fatal error 和 data race,再定位共享 map,最后按场景选择 RWMutex、sync.Map 或 channel 收口,并给出上线前检查清单。379 收藏 -
Go 的 sync 一次性初始化器适合把稳定结果封装成函数,但初始化失败也会被缓存。本文用配置加载和重试边界说明一次性函数、OnceFunc 与可重试初始化该怎么选。379 收藏 -
GORM软删除需同时满足结构体定义*time.Time类型的DeletedAt字段并加gorm:"index"标签、初始化时启用SoftDelete插件;查询自动过滤软删记录,仅Unscoped()可绕过;Unscoped().Delete()为物理删除,不可逆。378 收藏 -
通过反射和结构体tag实现Go通用字段验证器,支持required、min、email等规则,适用于表单和API参数校验,需注意仅导出字段有效且反射性能较低,可结合代码生成优化。378 收藏 -
Windows安装Go只需运行MSI包并重启终端即可;常见问题为PATH未生效、GOPATH误配或未初始化模块,goversion和gorun成功即环境已就绪。377 收藏 -
defer闭包捕获变量地址而非值快照,执行时读取最新值;for循环中需用f:=f或传参避免复用变量;defer参数立即求值,闭包变量延迟读取;panic时defer仍执行但需注意变量作用域。377 收藏 -
Go默认自动处理HTTP重定向(最多10次),可通过CheckRedirect函数自定义逻辑:限制跳转次数、禁用重定向或阻止跨域跳转,via参数记录历史请求路径便于调试。377 收藏