-
text/template的管道链不生效是因为函数未注册、类型不匹配或字段未导出;需手动注册如title函数,且函数签名须为func(inT)U或func(inT)(U,error),调用时用if处理错误。242 收藏 -
Golang · Go教程 | 3天前 | 性能优化 · Go教程 · 后端工程 · Golang实战 · database/sql · 连接池调优 · golang Go 性能优化 连接池 MaxOpenConns database/sql 后端工程 DBStats
从线上接口排队和 DBStats 指标出发,讲清 Go database/sql 连接池、MaxOpenConns、MaxIdleConns、连接生命周期、QueryContext 超时和上线压测检查。242 收藏 -
sync.Map不适合高并发写入,因其写新key需加锁升级dirtymap,导致热点key串行化;分片Map通过哈希隔离不同key的读写,显著降低锁竞争。241 收藏 -
Go反射无法获取包级常量的类型信息,因为常量在编译期被内联为字面量,无运行时身份;reflect.TypeOf(const)实际推导其底层类型,而非反射常量本身。240 收藏 -
slog.NewJSONHandler输出空对象或乱码,根本原因是未正确构造结构化字段(须用slog.String等函数而非裸键值对)、错误嵌套slog.With与slog.Group、或context传入不当;正确做法是独立传slog.Group为日志参数、用slog.With附加上下文字段,并确保Go版本≥1.22。240 收藏 -
用生产代码视角讲清 Go channel 谁来关闭、close 后发送 panic、多发送方协调、range 退出、context 取消和 worker 收尾写法。240 收藏 -
指针类型方法本质是定义在指针类型(如T或typePT)上的方法;值接收者无法修改原始值,指针接收者可修改;Go自动处理取址/解引用,但接口实现和不可寻址值受限。237 收藏 -
在Go语言中,使用panic和recover处理严重错误。1.panic用于终止流程,如配置错误、不可恢复错误;2.recover必须在defer中调用才能捕获panic;3.常见场景包括服务入口兜底、web中间件recover、测试断言;4.注意事项:90%错误应通过error处理、recover不可滥用、goroutine内需单独捕获、panic参数推荐string或error类型。229 收藏 -
Ebiten开发2D游戏核心是Update、Draw、Layout三件事:Update以固定60TPS运行逻辑,Draw按显示器刷新率自适应;inpututil.IsKeyJustPressed仅在Update中有效且仅触发一帧;图片须转为RGBA格式并确保导入image/png等解码器。226 收藏 -
viper支持默认值、文件配置、环境变量三者叠加,但需按顺序调用SetDefault(加载前)、ReadInConfig(中间)、BindEnv(加载后)才能实现“环境变量>文件>默认值”的正确优先级,否则覆盖失效。223 收藏 -
interface{~int|~string}合法是因为~前缀表示底层类型兼容,而interface{int|string}非法因int和string底层不同;Go不支持容器类型隐式转换,类型推断失败需显式指定类型参数。223 收藏 -
围绕 Go 1.24 map Swiss Tables 新实现,讲清控制字节、开放寻址、缓存局部性、内存占用、删除场景和线上基准验证方法。218 收藏 -
goget在Go1.18+默认不修改go.mod,仅当在含有效go.mod的模块根目录运行时才更新依赖;安装工具应优先用goinstall;指定版本需用@vX.Y.Z格式,私有库需配置GOPRIVATE。217 收藏 -
生产环境必须同时监听SIGTERM和SIGINT以支持优雅关闭,仅监听SIGINT会导致容器或systemd下强制终止;Shutdown前需先关闭listener,context超时应比平台终止宽限期短5s,并排查goroutine泄漏。209 收藏 -
Go中不存在安全可靠的“先检查再发送”模式,因channel关闭是单向承诺而非可探测状态;唯一安全方式是send-or-die:发送方须独占channel所有权并负责其生命周期管理。206 收藏