-
sort.Slice是Go1.8引入的最常用、最灵活的按字段排序方法,无需结构体实现sort.Interface,但需注意比较逻辑不可写错。409 收藏 -
Go中字符串拼接应避免循环使用+=,因其引发指数级内存分配与拷贝;推荐用strings.Builder配合Grow预分配,性能可提升200倍以上。409 收藏 -
time.Ticker适用于固定间隔推送,需配合context或done通道防泄漏;突发流量应使用rate.Limiter令牌桶;多实例需Redis+Lua实现分布式限流;失败推送须用指数退避而非立即重试。409 收藏 -
zk.Connect不panic的关键是:传全地址列表、设5秒以上超时、连接后立即用State()检查是否为StateConnected,不能仅依赖err==nil。408 收藏 -
使用sync.Pool和对象复用可显著降低Go高频分配场景下的GC压力,适用于短期、可重置的小对象;需避免大对象、长生命周期对象及goroutine泄漏风险,结合逃逸分析优先让对象留在栈上,合理设计Reset逻辑与使用边界,能减少30%~70%GC开销。408 收藏 -
Go中len()返回字节长度而非字符数:len("你好")得6,utf8.RuneCountInString()才得2;ASCII字符单字节单rune,中文/emoji等多字节但仅一rune。408 收藏 -
反射仅适用于运行时动态操作类型和值的场景,如序列化工具、ORM框架;reflect.ValueOf默认返回副本,需传指针并调用Elem()才能修改原变量,且仅导出字段在结构体可寻址时才可写。408 收藏 -
模板消息发送失败需同时满足三条件:服务号已认证、用户已关注、模板ID后台审核启用;silenceper/wechat/v2初始化时Cache不可为nil,须传memory或redis实例;字段key须严格匹配后台定义。408 收藏 -
Go语言无内置多版本切换机制,需手动管理多个二进制并靠PATH、GOROOT及软链接控制;官方推荐解压tar.gz至独立目录后通过ln-sf切换,默认不建议用包管理器安装主版本。408 收藏 -
策略模式通过接口+结构体组合实现算法可插拔,状态模式用状态对象封装行为并支持流转,二者可组合用于风控等需依状态动态切换算法的场景。408 收藏 -
Protobuf的go_package路径必须显式声明并包含版本号(如“example.com/api/v1;apiv1”),不同版本.proto文件须分目录存放,生成命令需确保import路径与go_package严格匹配,否则导致类型重复或运行时断言失败。408 收藏 -
Go微服务中权重路由需在入口handler内实现,而非依赖框架或中间件;须支持灰度header匹配与一致性哈希随机分流,并从外部动态加载配置以避免重启。408 收藏 -
必须用gotest-bench=运行testing.Benchmark,因其自动预热、多轮采样、剔除异常值;手动用time.Now()测单次json.Marshal耗时不可靠,结果偏差可达2–3倍。408 收藏 -
本文详解Go语言中安全、精准地为time.Time类型添加天数(如将周数转换为天数后叠加)的正确方法,重点介绍AddDate的使用场景、优势及常见误区。408 收藏 -
最简限流装饰器需用闭包捕获rate.Limiter实例,避免每次调用新建或全局共用;推荐rate.Every而非手动计算速率;Wait必须传入context且需处理error。408 收藏