-
json.Unmarshal必须传指针,否则解析结果为零值;结构体字段需加jsontag才能匹配JSON键名;类型不匹配会报错,忽略err或缺少tag导致静默失败。488 收藏 -
Time.After会悄悄吃掉内存,因为它每次调用都新建*Timer,背后绑定goroutine和未读channel;若只取接收端而未消费,channel缓冲区持续积压导致内存泄漏。318 收藏 -
Jaeger.ClientConfig.Sampler不能热更新,因Tracer初始化后sampler实例被固化且不可替换;需改用jaeger.RemoteSampler,通过agent的sampling端口(如5778)动态拉取策略实现运行时重载。220 收藏 -
Go编译器在build阶段强制检查import循环依赖并报错,不提供运行时检测;需用golist、gomodgraph、gopls等工具定位环路路径,而非反射或AST调用分析。219 收藏 -
swaginit需显式指定多目录路径并严格遵循注释格式:-g指定入口文件,-d列出internal/handler等子包;注释字段名、缩进、空格须精确匹配;泛型需手动@Schema声明;Nginx部署注意alias末尾斜杠。474 收藏 -
不用new或字面量创建对象是为了避免强耦合,工厂方法通过返回接口解耦“谁来造”和“造什么”,适合单一产品族变化;抽象工厂则用于创建相互关联的对象族,保证风格一致。175 收藏 -
值类型比较按值,指针类型比较地址。1.值类型(如int、string、struct)用==比较内容是否相等;2.指针比较判断是否指向同一地址或都为nil;3.值与指针不可直接比较,需解引用;4.map、slice的指针可比较地址,但本身不可比较。111 收藏 -
Go中无装饰器语法,中间件链本质是func(http.Handler)http.Handler函数的嵌套组合,执行时形成隐式递归调用链,顺序与包装顺序相反,需确保每层调用next.ServeHTTP且正确传递r/w。285 收藏 -
Go测试文件须命名为_test.go且与源码同包;测试函数需以Test开头、接收testing.T参数;推荐表驱动测试和t.Run子测试,注意资源隔离与错误传播。119 收藏 -
panic通过堆栈展开(stackunwinding)逐层执行defer并终止当前goroutine;仅在defer内直接调用recover可捕获,且部分致命panic不可安全恢复。326 收藏 -
用http.Header获取X-CSRF-Token后,需原子验证其存在性、时效性与未使用性:先查Redis是否已存在该Token(SetNX),若不存在或已过期则拒收;若存在则校验签名与过期时间,全部通过才允许业务处理,否则返回409或422。309 收藏 -
原生map非并发安全,读写冲突会触发panic;sync.Map仅适用于读多写少场景,有性能与功能限制;推荐用sync.RWMutex封装原生map,必要时采用分片锁优化写吞吐。397 收藏 -
要写真实性能的Gobenchmark,需用b.ResetTimer()隔离初始化开销,避免I/O和全局状态干扰,结合-benchmem分析分配,再用benchstat做统计显著性检验。349 收藏 -
reflect.Kind返回底层基础类型(如int、slice),用于运行时动态判断类型类别;需先调IsValid()防panic,适合统一处理数值型、slice等,但不区分自定义类型名,也不保证操作能力。403 收藏 -
用net/http实现投票服务:内存map存选项,sync.RWMutex保护并发;/vote投票(校验token去重)、/results查结果、CSV导出加UTF-8BOM;handler全部defer-recover,禁用debug.PrintStack,日志不回传前端。152 收藏