-
在Go中,只有以Test开头且首字母大写的导出函数(如TestMyFunc)才会被gotest自动识别执行;私有函数需通过_下划线命名约定(如Test_myFunc)实现可测试性,同时保持封装性。
-
database/sql的Stats()不能直接当监控用,因其返回自打开以来的累计值,无法反映当前活跃连接或瞬时压力,需周期性采集差值并计算速率,且调用有锁、影响性能。
-
gRPC凭借HTTP/2多路复用、ProtoBuf高效序列化和Go的goroutine轻量并发,成为高并发服务间通信的优选方案。1.定义Proto文件并生成Go代码实现服务契约;2.服务端通过控制MaxConcurrentStreams限制并发流数以保障稳定性;3.客户端复用ClientConn连接并利用goroutine并发调用,结合sync.WaitGroup协调请求,全面提升系统吞吐能力。
-
Go中time.Time没有内置过期时间概念,业务定义的过期时间可通过Unix()(秒)、UnixMilli()(毫秒)或UnixNano()(纳秒)转为时间戳;JWT的exp字段在v5库中已自动转为time.Time;Redis的EXPIREAT需传Unix秒级时间戳,而Set方法传time.Duration;判断过期应先检查IsZero()再调用Before(time.Now())。
-
Go标准库可原生处理tar.gz,需正确组合archive/tar与compress/gzip:压缩时用gzip.Writer包裹tar.Writer,解压时用gzip.NewReader解包后再传给tar.Reader,且必须严格遵循关闭顺序和路径/权限/格式等细节。
-
不能,前端必须用protobuf.js加载.proto文件解析二进制数据;Go后端需设Content-Type为application/x-protobuf,避免UTF-8转码损坏;字段名不一致需通过json_name和go_package统一;Web端应谨慎评估是否使用Protobuf。
-
必须用map[string]*User替代[]User,因切片无法O(1)查找、值比较不可靠、无法检测重名;注册需校验键存在,Mediator接口必须带context.Context以支持超时与取消。
-
NSQ需用租户前缀命名topic(如orders_acme)并白名单校验tenantID;Kafka应将tenantID嵌入固定consumergroupID;RabbitMQ可用vhost隔离但需URL编码和独立连接。
-
httpmock是拦截并返回预设响应最省事的方式,它无缝接管http.DefaultClient和自定义client,无需改业务代码;需调用httpmock.Activate()启用、httpmock.DeactivateAndReset()清理,否则请求照发或污染后续测试。
-
gzip压缩HTTP请求体前必须设置Content-Encoding:gzip头,否则服务端因无头而解析失败;需用bytes.Buffer+gzip.Writer压缩并调用Close()确保完整性,同时配置transport参数防弱网超时。
-
reflect.TypeOf返回的是接口类型,不是底层类型你写reflect.TypeOf(x),得到的永远是reflect.Type接口实例,不是原始类型(比如int或*string)。想拿到具体类型名或底层结构,得调用它的方法,而不是直接打印或比较。常见错误现象:fmt.Println(reflect.TypeOf(x))看起来像输出了类型,但其实是调用了String()方法——它返回的是带包路径的字符串(如"main.User"),不能直接用于类型断言或switch判断
-
http.Serve默认阻塞主线程,需手动放入goroutine启动;但必须避免竞态、确保错误可捕获,并理解其底层Accept循环的并发模型——本文详解安全封装方式、常见误用陷阱及GoHTTP内置goroutine并发机制。
-
DeleteOne必须传非nilfilter,否则panic;需校验ID并用bson.M构造;删除后必须检查DeletedCount是否为1;应使用context.WithTimeout防卡死;批量删除优先用DeleteMany。
-
新手练手应从5分钟可运行、改代码即见效、错误信息直白的CLI到Web递进项目入手:go-simple-calculator(flag/运算/错误处理)、quiz-app-cli(CSV题库/终端交互/select+channel)、go-todo(CLI+HTTP双模式/内存存储/并发安全)、Godis简化版(Redis协议/TCP/RESP解析),重在建立程序生命周期感知。
-
Go程序无法真正热更新,所谓“热更新”实为外部工具触发的平滑重启或模块重载;fsnotify监听+gorun仅适用于本地开发,存在进程丢失、请求中断、路径敏感、启动慢、信号与环境变量无法透传等问题。