-
Gohttp.Client默认连接池因MaxIdleConnsPerHost=2过小,高并发下复用率低、频繁建连握手,导致端口耗尽和超时;需合理配置MaxIdleConnsPerHost、MaxConnsPerHost、IdleConnTimeout及DialContext参数。
-
Go语言需用golang-migrate/migrate等第三方库实现真正数据库迁移,而非GORM的AutoMigrate;推荐用CLI管理,迁移文件按时间戳命名并成对编写up/downSQL,确保可逆与版本追踪。
-
Go可用标准库+少量依赖构建高吞吐内存计算核心:用sync.Pool复用对象降GC压力,unsafe.Slice避免底层数组拷贝,chanstruct{}+select实现无锁批量触发。
-
因轻量、可控、嵌入式场景需手写倒排索引:用map[string][]int实现,文档ID为整数,append追加、预分配slice,保留重复ID以保障TF准确;中文用gse分词,过滤单字与停用词;查询用双指针归并求交/并集,IDF预缓存,top-K在合并后截取。
-
Go中值类型是否逃逸由逃逸分析决定,非语法本身;用gobuild-gcflags="-m"可查看变量是否“escapestoheap”;指针返回、闭包捕获、赋值给interface{}等语义操作导致逃逸。
-
CGO中C.CString分配的内存不释放会导致持续内存泄漏,RSS不断上升直至OOM;必须配对C.free,且需根据C函数文档判断返回指针是否需手动释放。
-
直接用SETBIT因日活是布尔型而非计数,位图节省内存且支持高效交并差;需将用户ID映射为非负整数offset,推荐用预分配ID或自增主键;Go中用go-redis/v9的SetBit和BitCount,注意key带日期前缀、设TTL、防跨天污染与分片扩展。
-
rate.NewLimiter(rate.Limit,burst)的两个参数分别是令牌生成速率(每秒补充令牌数,float64)和桶最大容量(int),burst至少应与rate相当(如rate.Limit(10)配burst=10),过小导致首秒大量拒绝,过大则限流失效;rate<0.01时因纳秒精度丢失行为异常。
-
Go的net.Conn.Read不保证读取完整业务包,必须自定义消息边界。正确做法是用io.ReadFull先读4字节头解析body长度,再读满body;维护独享可增长缓冲区处理粘包拆包,设读超时,禁用分隔符方案。
-
Go语言适合做智能家居后端,但需抽象DeviceDriver接口隔离协议、权限与状态同步,通过MQTT+WebSocket双通道实现可靠状态推送,并用策略文件动态管理设备访问权限。
-
sort.Sort要求传入接口值而非指针,因为sort.Interface的Len、Less、Swap方法均定义在值接收者上;只要自定义类型(如IntSlice[]int)以值接收者实现这三方法,传值或传指针均可,但[]int本身未实现该接口,故不能直接传&[]int。
-
Go标准库不支持UUID,必须使用github.com/google/uuid;它兼容RFC4122,推荐v4随机生成(uuid.NewUUID()),线程安全且不返回error;数据库应存二进制格式(如PostgreSQLUUID或MySQLBINARY(16)),避免字符串存储引发的性能与一致性问题。
-
用net.DialTimeout判断接口连通性最稳:仅建立TCP连接,超时可控(如3秒),不触发DNS/TLS/HTTP上层逻辑;需指定端口、细判net.OpError错误、加DNS缓存、重复探测去抖、用time.Ticker控制节奏、带context防goroutine泄漏、结构化日志与重试告警。
-
Golang中生产者消费者模式依赖goroutine和channel实现,通过无缓冲或带缓冲channel进行同步通信,支持多消费者并行处理,可结合WaitGroup或done信道控制完成信号,合理关闭channel避免泄漏。
-
在Go语言中,包重命名通过import别名解决命名冲突、提升可读性。例如import(myfmt"fmt")将fmt重命名为myfmt,后续用myfmt.Println调用;当导入同名包如json和jsoniter时,别名可明确区分标准库与第三方;使用_进行匿名导入可触发init函数实现初始化副作用,如注册数据库驱动;建议仅在必要时使用别名,避免降低可读性,保持团队统一规范。