golang
已收录文章:260篇
-
不能直接用rate.NewLimiter做三维度限流,因其无key概念,所有请求共享同一令牌桶;必须为每个IP+用户ID+接口路径组合创建独立limiter实例,并用sync.Map安全存取、定时清理过期项。215 收藏
-
GoRPC错误处理需区分调用失败与业务失败,前者通过返回error实现,后者应在Reply结构中嵌入错误字段如Errorstring或自定义AppError类型传递详细信息,同时避免panic并用defer+recover统一捕获异常,确保服务健壮性。213 收藏
-
匿名结构体是无需预先定义的临时结构体,直接通过struct{}定义字段并创建实例,适用于局部数据组织、API响应解析等一次性场景,提升代码简洁性与可读性。213 收藏
-
Atlasschemadiff是目前Go项目做数据库Schema对比最稳省事的选择,它能声明式比对当前库与目标定义并输出可审阅SQL,而GORM/Ent的AutoMigrate仅同步状态、不生成差异脚本、无历史记录。213 收藏
-
回退Go模块版本可直接修改go.mod文件或使用goget命令指定旧版本,如gogetexample.com/lib@v1.2.0,执行后工具链自动更新依赖并下载对应版本,通过golist-mall或gomodgraph验证版本变更,操作简单且符合语义化版本管理原则。212 收藏
-
Go的goroutine调度基于GMP模型,通过限制并发数、避免阻塞P、使用sync.Pool复用对象,可有效提升性能。1.GMP模型中P默认等于CPU核心数,调度器采用work-stealing减少竞争;2.过多goroutine导致调度开销增加,应使用带缓冲channel控制并发,如sem:=make(chanstruct{},100);3.阻塞操作会使M脱离P,影响调度效率,需用context超时或非阻塞I/O避免;4.高频分配对象加重GC压力,可用sync.Pool复用内存,降低分配开销。合理控制210 收藏