-
长轮询不能直接用http.HandleFunc配合无限循环,因HTTPhandler默认同步阻塞,for{}或time.Sleep会卡死goroutine、耗尽并发能力,且客户端超时断开后Go不自动清理goroutine导致泄漏;须禁用读写超时,用context、select和time.After实现三重控制并defer清理资源。
-
Go定时邮件发送器由三部分构成:配置SMTP服务(如QQ邮箱需授权码)、封装邮件发送函数(支持HTML并设Content-Type)、用time.Ticker或robfig/cron/v3调度;内容可从文件或数据库读取,用text/template渲染后发送。
-
用log包写文件日志需用os.OpenFile指定os.O_APPEND|os.O_CREATE|os.O_WRONLY标志创建文件,复用log.Logger实例,避免覆盖或失败;可全局SetOutput重定向,但须在首次log.Print*前调用;按级别分流需多个独立logger绑定不同文件;不推荐fmt.Fprintln因缺失时间戳、行号、并发安全等特性。
-
Go标准库image/png仅负责PNG编解码,不处理绘制;Decode需io.Reader输入并返回适配原始色深的image.Image(如NRGBA/Gray),Encode要求图像实现ColorModel/Bounds且格式合法;常见错误包括忽略错误、越界访问、签名缺失等。
-
Go标准库heap包仅维护堆性质,非堆排序实现;需手写siftDown、从最后一个非叶节点建堆,并动态管理heapSize才能原地完成堆排序。
-
gotest需确保模块初始化、测试文件以_test.go结尾、函数名以Test开头且参数为*testing.T;推荐表格驱动测试、接口抽象mock外部依赖,并注重边界覆盖与可维护性。
-
使用gRPC替代HTTP/JSON可显著提升Golang微服务性能,结合连接复用、ProtocolBuffers序列化、合理超时重试与熔断机制,能有效优化通信效率与系统稳定性。
-
http.ListenAndServeTLS(addr,certFile,keyFile,handler)是最简HTTPS启动方式,需PEM格式证书链与无密码私钥,参数顺序不可错;自动续期推荐autocert并持久化Cache;本地开发用mkcert生成系统信任证书。
-
Go语言通过gRPC内置的Resolver和Balancer实现客户端负载均衡,结合etcd等注册中心完成服务发现;支持RoundRobin、Random、LeastRequest及ConsistentHashing等策略,可基于场景选择或自定义;配合健康检查与重试机制,提升系统可用性与伸缩性。
-
Go中返回局部变量指针安全但非必要,应避免过度指针化:小结构体、基础类型优先值传递;仅需读取时用值参数;修改字段或结构体过大才用指针接收者;API设计应减少nil检查,优先零值友好和接口抽象。
-
WaitGroup值传递导致Done()无效:必须用指针传递;deferwg.Done()应置于函数首行;无缓冲channel需提前启动接收goroutine;Add()与Done()必须一一对应。
-
Go标准库无内置LRU,需用container/list+map+sync.RWMutex实现;sync.Map不适用因无法维护访问序、不能原子执行查map/移节点/返回值,且并发MoveToFront会panic;正确做法是map存*list.Element,Element.Value为含key/value的结构体,读写加锁粒度要细,容量控制须先插后删,四者并发对齐才稳定。
-
字符串转[]rune需避免盲目使用[]rune(s),因其会全量解码并分配新内存;大字符串应优先用range遍历,必要时加长度检查;[]rune转字符串必须用string(runes),禁用拼接;截断中文须基于rune而非字节;正则匹配中文无需先转[]rune。
-
字段顺序影响结构体内存布局,调整顺序可减少内存浪费。1.按字段大小从大到小排列可减少填充字节,如将int64、int32、bool顺序排列可节省8字节;2.将同类型字段组合在一起避免分散导致的padding,如多个int32连续放置;3.慎用嵌套结构体,因其继承最大对齐值可能导致额外填充;此外可用reflect.TypeOf.Align()和unsafe.Offsetof()查看对齐与偏移,大量实例化时优化效果更明显。
-
匿名字段是Go中“只写类型、不写字段名”的结构体嵌入方式,实现轻量组合而非继承;支持嵌入结构体、自定义类型及慎用的基础类型,可提升字段与方法,但需防范命名冲突与过度嵌套。