-
go-swagger默认不解析普通注释,仅识别紧贴导出函数上方的//swagger:route和//swagger:operation标签;struct需被显式引用且导出才能生成model;嵌入UI需手动挂载静态资源,推荐swag替代以简化流程。
-
性能测试看函数级健康基线,压力测试看系统级崩溃临界点;前者用gotest-bench测单函数响应与资源占用,后者用hey等工具模拟并发洪峰并监控服务端指标。
-
Go的http.Request不自动解析表单,须显式调用ParseForm()或ParseMultipartForm();否则r.Form和r.PostForm为空;r.FormValue("username")失效即因未调用解析方法;ParseForm()适用于普通表单,ParseMultipartForm(maxMemory)用于含文件上传的表单。
-
Go接口无运行时方法签名,reflect无法获取接口要求的方法列表;只能通过具体实现类型的实例反射其方法,且需用指针接收者确保完整性。
-
原型模式通过复制现有对象创建新对象,在Go中利用接口和结构体实现克隆,支持浅拷贝与深拷贝,结合注册表可管理原型实例,适用于频繁创建相似对象的场景。
-
用带缓冲channel实现多生产者多消费者队列,tasks:=make(chanstring,100)创建共享队列,生产者并发写入、消费者forrange监听,关闭由生产者统一执行。
-
Go的map默认非并发安全,多goroutine读写会触发panic;sync.Map适用于高读低写场景,但不支持遍历且无泛型;推荐用泛型SyncMap+RWMutex封装以兼顾类型安全与并发控制。
-
Go语言原生支持UDP通信,核心为net.UDPAddr和net.UDPConn;可用net.DialUDP建立连接式socket,或net.ListenUDP监听端口;需手动处理丢包、超时,推荐goroutine并发读取并及时关闭连接。
-
不能直接用strings.ReplaceAll处理大文件,因会将整个文件加载到内存并多次拷贝字符串,GC压力大且需重复扫描;应采用流式处理结合ahocorasick多模式匹配算法,预加载敏感词构建自动机,按行或分块读取并精准替换。
-
Go微服务性能监控需聚焦延迟分布、资源水位、请求健康度三大问题:用HistogramVec按path/method/status打标并设业务适配buckets,避免Summary;运行时指标须用rate观察goroutines趋势,GC次数突增比耗时更早暴露内存泄漏;HTTP状态码需正确捕获,pprof必须限访问、控采样时长。
-
unsafe仅在零拷贝切片/字符串构造、结构体字段硬跳、C互操作三类场景值得使用;需严格管控内存生命周期,避免逃逸分配与越界写,禁止对unsafe.Slice返回值append、对unsafe.String底层内存写入、手算字段偏移或拆分uintptr计算。
-
直接用INCR+EXPIRE会因非原子性导致key永久存在而误限流;正确做法是用Lua脚本将计数与过期封装为原子操作,并通过redis.NewScript注册复用。
-
Go允许结构体指针直接用点号访问成员,无需显式解引用;p.Name报错是因运算符优先级导致误解析,正确写法是p.Name或(p).Name。
-
pprof默认暴露goroutineprofile,访问/debug/pprof/goroutines?debug=2首行即为当前协程总数,适合监控;debug=1返回完整栈迹用于排查阻塞,需确保pprof正确注册且生产环境限制访问。
-
govet是Go工具链自带的语义分析检查工具,专查语法合法但逻辑可疑的代码,如printf参数不匹配、range复制结构体、struct标签拼写错误、未用变量、WaitGroup调用顺序错误等。