-
Exists方法返回int64而非bool,须用ifexists==1判断;必须用带超时的context避免goroutine泄漏;支持多key但返回存在总数,需Pipeline获取明细。
-
安装Golang在macOS上可通过官方安装包或Homebrew完成,推荐初学者使用官方.pkg包,开发者使用Homebrew;安装后若“goversion”命令未找到,主因是PATH环境变量未正确配置,需将/usr/local/go/bin和$(goenvGOPATH)/bin加入~/.zshrc或~/.bash_profile并执行source命令生效;GOPATH现主要用于存放goinstall工具和模块缓存,不再强制作为项目目录,GOROOT通常无需手动设置;管理多版本Go可使用goenv,通过H
-
Go中唯一合法的嵌套循环跳出方式是goto配合标签,标签需紧贴for前一行且与goto同函数内,不可跨作用域或跳过变量声明。
-
Go语言通过gRPC内置的Resolver和Balancer实现客户端负载均衡,结合etcd等注册中心完成服务发现;支持RoundRobin、Random、LeastRequest及ConsistentHashing等策略,可基于场景选择或自定义;配合健康检查与重试机制,提升系统可用性与伸缩性。
-
用net/http实现批量POST接口需设计数组型请求体(如[{"name":"a"},{"name":"b"}]),逐项校验、事务内分条处理并收集错误,响应含results数组标识每项success/error/id。
-
Go原生gotest提供简洁高效的自动化测试能力,关键在于理解其设计逻辑并合理组织代码、标记、执行方式和集成路径。
-
Go模板通过{{}}绑定数据,支持变量输出、条件判断、循环控制及嵌套模板,结合自定义函数实现安全高效的动态内容生成,适用于Web渲染等场景。
-
必须用NewGaugeVec定义带标签的长连接监控指标,显式注册并在线程安全前提下于连接建立/关闭时调用Inc()/Dec()更新,避免使用默认注册器和非法标签。
-
io.Pipe本质是共享64KiB环形缓冲区的非线程安全读写对,仅支持单reader单writer并发模式,多goroutine读写会竞态;正确用法是writergoroutine负责Close/CloseWithError,reader通过Read返回值感知EOF或错误。
-
bufio.Scanner读整行最稳:它按行切分、自动丢换行符、内置缓冲、可处理大文本;需先调Scan()再取Text(),错误用Err()检查,默认单行上限64KB。
-
使用sync.RWMutex保护map适合读多写少场景,sync.Map适用于高频读写且键空间固定的情况,结合TTL可实现自动过期缓存,生产环境推荐go-cache或bigcache等成熟库,选型需根据读写比例、数据量和性能需求综合考量。
-
传*T不省内存但放大生命周期风险:channel底层只复制8字节句柄,性能差异常被高估;多goroutine并发修改同一*T触发竞态;小结构体传值传指针性能相近;含[]byte等字段时传指针反增GC压力;循环中取&item发channel易致悬垂指针。
-
因为http.ServeMux仅负责路由分发,不支持后端选择、健康检查或连接复用;真正的负载均衡需在反向代理层实现,如自定义Director函数轮询多后端并处理Host头、真实IP透传及HTTP级健康探测。
-
Go接口底层并非单一结构,而是根据接口类型自动选择:空接口interface{}对应eface(含_type和data),非空接口对应iface(含tab和data)。二者内存布局不兼容,运行时动态区分。
-
errgroup.Wait()仅返回第一个非nil错误,后续错误被丢弃,需在Group.Go()中即时判断错误类型而非等待Wait()返回后处理。