Go语言技术文章
-
Go语言reflect包本身不提供并发安全保证,修改数组元素是否线程安全取决于是否对底层数据加同步控制;必须由开发者显式使用锁、原子操作等机制保障并发安全。214 收藏 -
Gin的gin.Recovery()仅记录日志并返回固定500响应,不透出panic值、不执行自定义错误映射、不调用c.Error(),且会拦截后续recover逻辑;需禁用默认中间件并手写带堆栈记录与统一响应的PanicRecovery中间件,同时覆盖业务error和goroutinepanic。214 收藏 -
Golang · Go问答 | 1个月前 | 连接池 · 性能排查 · database/sql · Go问答 · Go 连接池 DBStats sql.DB WaitCount SetMaxOpenConns
用一个 Go 后端小实验解释 sql.DB 的 WaitCount 为什么增长,如何从 InUse、Idle、WaitDuration 判断连接池是否太小,并给出 SetMaxOpenConns、SetMaxIdleConns 的调参和验证清单。214 收藏 -
Atlasschemadiff是目前Go项目做数据库Schema对比最稳省事的选择,它能声明式比对当前库与目标定义并输出可审阅SQL,而GORM/Ent的AutoMigrate仅同步状态、不生成差异脚本、无历史记录。213 收藏 -
go-micro已于2022年底归档,v4停止更新且存在跨平台插件兼容问题;v3依赖mdns本地注册,上容器需切etcd;推荐改用grpc-go+consul或go-zero等轻量方案。213 收藏 -
Go服务OOM被杀主因是GOMEMLIMIT、OS内存限制与pprof可观测性未协同生效;GOMEMLIMIT仅控堆内GC时机,不约束mmap/cgo等堆外内存,须配容器memory.limits+70%~75%GOMEMLIMIT+实时pprof监控缺一不可。212 收藏 -
真实业务中Gin与Fiber性能差异几乎不可感知,因数据库、序列化、日志等耗时占端到端延迟60%~80%,框架调度开销通常低于5%;压测QPS差约6%仅在纯JSON路径下成立,实际场景中被其他环节完全淹没。212 收藏 -
答案:通过runtime.MemStats和pprof工具分析内存、goroutine及GC数据,定位内存泄漏、并发瓶颈并优化。212 收藏 -
Golang · Go问答 | 1个月前 | interface · 单元测试 · 架构设计 · repository · Go问答 · 单元测试 架构设计 interface 接口设计 Go问答 调用方定义 Repository
Go 项目里的 interface 通常更适合由调用方按需要定义,而不是在实现方提前造大接口。判断重点是依赖方向、测试替身、契约大小和未来演进成本。212 收藏 -
Go语言通过gofmt工具强制统一代码风格,规定使用tab缩进、无分号、大括号不换行,并要求import分组、驼峰命名、清晰标识符及规范注释,实现“约定优于配置”的简洁开发体验。211 收藏 -
Go语言单元测试中,验证错误处理需从基础错误返回、类型匹配、外部依赖模拟、错误链检查等层面入手,结合errors.Is和errors.As实现精准断言,通过接口抽象与mock技术模拟哨兵错误、自定义错误及包装错误,确保代码在各类错误场景下的正确响应与韧性。209 收藏 -
Go本身不提供分布式配置中心,因其标准库sync.Map、flag、os.Getenv等均为进程内状态,多实例下无法共享感知,必须依赖etcd等外部存储及自定义watch同步机制。209 收藏 -
使用GolangWorkspace可以有效解决多模块项目依赖管理混乱的问题,其核心在于通过go.work文件集中管理多个模块及其依赖。1.创建go.work文件:运行goworkinit初始化工作区;2.添加模块:使用goworkuse命令将各模块添加至go.work文件中;3.统一构建与运行:在根目录下执行gobuild或gorun等命令,Go工具链自动处理模块间依赖;4.依赖管理:通过goget更新依赖,解决冲突时可手动编辑go.mod文件;5.调试支持:使用支持Workspace的IDE或delve209 收藏 -
生产环境必须同时监听SIGTERM和SIGINT以支持优雅关闭,仅监听SIGINT会导致容器或systemd下强制终止;Shutdown前需先关闭listener,context超时应比平台终止宽限期短5s,并排查goroutine泄漏。209 收藏 -
Go接口幂等需分三层:redis.SetNX原子拦截(带EX、不拆步)、结构化缓存结果(含status/result/timestamp)、数据库唯一索引兜底;缺一不可。208 收藏