-
time.Sub()计算时间差必须确保两时间点时区一致,否则结果为UTC偏移差而非钟表时间差;Duration支持纳秒级精确运算但不提供年月方法,因日历逻辑复杂;解析字符串需显式指定时区,推荐用ParseInLocation;判断相对日期应优先用AddDate而非Sub后换算。
-
recover()直接调用恒返回nil,必须置于defer函数体内且defer需在panic前注册;仅对本goroutine有效;recover后不可继续原逻辑,须清理资源并退出。
-
select配合time.After是Go中最轻量常用超时控制方式,但需避免直接套模板导致定时器未复用或goroutine泄漏;正确做法是复用timer或用context.WithTimeout。
-
Go语言用crypto/ssh执行远程命令的核心路径是:先ssh.Dial()获取*ssh.Client,再client.NewSession()创建会话,最后用session.Run()或session.Output()执行;client.Do()不存在,HostKeyCallback必须显式设置且不可复用session。
-
真正安全的做法是让敏感信息“不进内存、不进日志、不进Git、不进环境变量”;推荐文件挂载+os.ReadFile,K8sSecret以volume方式挂载为权限0440的文件,Go直接读取且绝不打印内容。
-
Go标准库不支持ISO9660解析,须用github.com/knqyf263/go-isofs;需显式启用Joliet支持才能正确读取中文/长文件名;读取文件内容必须调用entry.Open()而非os.Open。
-
不能直接用net/smtp封装通用发送函数,因不同邮件后端(如SendGrid、Postfix)认证方式、API路径、请求格式、错误结构互不兼容;net/smtp仅支持SMTP协议,对HTTP类API无效;强行统一会导致参数爆炸、类型难收敛、调用方需预知后端类型。
-
新手写单机博客后端选gin更省事;练手HTTP本质或极简环境用net/http更透明;两者在I/O密集型场景性能差异可忽略。
-
Go模糊测试必须用testing.F参数,因它封装语料加载、变异调度等能力;若误用testing.T则函数被静默忽略;f.Add()与f.Fuzz()类型须严格对齐,仅支持string、[]byte、基础数值及布尔型,不支持struct等复合类型。
-
令牌桶算法允许突发流量,以固定速率添加令牌,请求需消耗令牌;漏桶算法严格按固定速率处理请求,平滑流量。1.令牌桶实现包括设定桶容量、定时补充令牌、请求取令牌;2.漏桶通过channel模拟队列,固定速率处理请求。适用场景上,令牌桶适合WebAPI限流,漏桶适合后台任务队列。实现时需注意并发安全、精度问题和资源占用。
-
必须异步落库,否则同步写库会阻塞WebSocket读协程导致超时断连;应通过带缓冲channel解耦接收与存储,并建(room_id,created_at)联合索引优化查询。
-
Go二进制默认静态链接、零外部依赖,但需警惕隐性环境依赖:cgo启用、外部命令调用、硬编码系统路径、TLS证书查找、DNS解析及嵌入资源管理。
-
答案:Go字符串为UTF-8编码的不可变字节序列,拼接时+运算符在循环中性能差,应优先使用strings.Builder或bytes.Buffer;处理Unicode时需用rune避免字节操作错误。
-
ShouldBind依赖Content-Type自动选择解析器,易因header错误静默失败;应优先使用ShouldBindJSON/Query/Form显式绑定,并统一结构体tag。
-
答案:Go压力测试需控制并发、节奏与指标收集,用net/http+goroutine可手写简单脚本,结合sync.WaitGroup、time.Tick和信号量控制并发;推荐go-wrk或vegeta进行标准化测试,支持多模式压测与结果输出;务必分离压测与服务端,禁用连接复用,通过pprof采集CPU、Goroutine、GC等数据定位瓶颈;确保测试可复现,固定数据、清空缓存、关闭日志,至少三轮取中位数对比优化效果。