-
不能用net/http.Handler直接做多协议转换,因其强制消费请求体和修改头部,破坏gRPC/WebSocket/MQTT等依赖原始字节流或连接生命周期的协议;必须分层处理:HTTP层仅识别分流,绝不读Body,再由专用codec接管连接。
-
命令模式在Go中本质是接口抽象,即定义Command接口并让业务操作实现它,核心在于封装请求与执行逻辑分离,通过依赖注入和commandrunner实现解耦与可测试性。
-
Golang在CPU密集型任务中比Python快5–10倍,因Go编译为机器码且无GIL,而Python受解释执行和GIL双重限制;IO密集型单次请求差异小,但并发吞吐Go可达800QPS,Python同步仅120QPS,主因调度模型不同。
-
应使用net/http而非net直接写TCP服务,因浏览器无法直连裸TCP;需通过HTTP提供静态页并用WebSocket协议升级实现前端实时交互,借助gorilla/websocket复用http.ServeMux,避免额外端口与TLS配置复杂度。
-
Go通过结构体嵌入(embedding)实现“匿名字段”语法糖,允许直接访问嵌入类型中的字段;当嵌入结构体中存在唯一同名字段时,b.a与b.A.a等价,本质是编译器自动解析的提升字段(promotedfield)。
-
Go中唯一推荐的单例实现是sync.Once+包级指针变量,因其线程安全、延迟初始化、支持错误返回;禁用if-nil判断(易竞态)、init()(无法按需/返错/测试)及局部声明once(失效)。
-
使用dchest/captcha或mojocn/base64Captcha均可,但需注意:前者VerifyString验证即删ID,后者store.Verify需显式设true才删除;两者均无自动过期,须配SetExpiration或换RedisStore;reCAPTCHAv3必须校验响应中的Hostname、Action与Score,且secretkey严禁硬编码。
-
因日志场景吞吐优先,sarama支持异步批量生产、TCP连接复用、自动重试及精细参数控制,而kafka-go默认同步写、批量需手动实现,压测易成瓶颈;但需谨慎配置sarama的MaxOpenRequests等参数以防阻塞或超限。
-
滑动窗口计数器不能用无锁map+time.Now(),因并发读写panic、遍历删key性能差且时间戳取整导致统计偏差;应使用预分配原子数组分片;漏桶禁用time.Ticker,需按需补token并防时钟回拨;rate.Limiter是令牌桶非漏桶;分布式必须用RedisZSET+Lua+服务端时间。
-
用Go构建轻量笔记分类与搜索功能,核心是结构体嵌套实现多级标签(如"tech.go.web")、内存索引加速查询、标准化文本匹配支持AND搜索及权重排序,并通过HTTP接口暴露分类检索与全文搜索能力。
-
bufio.Scanner默认按行分割,需用Split函数自定义分隔逻辑;SplitFunc须处理data不完整和atEOF状态,正确实现三步:找分隔符、切token、更新剩余数据。
-
trace_id为空主因是context未透传到位;HTTP入口须用私有struct{}作key注入,zap需封装WithContext自动提取,goroutine和DB调用必须显式传ctx,HTTP/gRPC出站需双写header/metadata。
-
直接用crypto/aes会panic是因为其仅提供底层原语,要求密钥必须为16/24/32字节且IV长度固定(如CBC需16字节),字符串未转[]byte、长度不符或含非法字符均触发invalidkeysize或missingIV错误。
-
main.go应放在cmd/子目录下(如cmd/myapp/main.go),根目录仅保留go.mod等元信息;internal/是Go强制的访问边界,用于封装不对外承诺的实现;API层负责错误映射为HTTP状态码,domain层只定义业务语义错误;go.mod的module名应为最终导入路径(如github.com/user/repo)。
-
批量重命名须校验路径合法性:用filepath.Clean并检查前缀,过滤非法字符;用filepath.WalkDir避免软链风险;每步用临时名实现原子重命名;跨盘符时改用copy+remove并补全元数据。