-
最常用轻量HTTP限流方式是golang.org/x/time/rate.Limiter,基于令牌桶算法、线程安全;需服务启动时复用实例,按IP/用户/路径等粒度限流,配合sync.Map实现per-IP限流并注意过期清理,返回429时应设Retry-After等标准响应头,高并发下需关注Reserve()带来的GC和锁竞争问题。
-
用kind搭建本地Kubernetes集群并配合client-go开发,需显式指定可写kubeconfig路径(如/tmp/kind-config-my-dev),禁用默认加载逻辑,手动调用clientcmd.BuildConfigFromFlags,设置insecure-skip-tls-verify:true或正确注入CA,并通过超时上下文验证namespace列表以确保通信正常。
-
首先定义.proto接口文件并生成Go代码,接着实现服务端和客户端逻辑。使用Golang结合gRPC可高效构建类型安全的微服务通信,需注意版本一致、地址可达及上下文超时处理。
-
Go语言无抢占式锁,sync.Mutex等锁不可被强制中断;获取失败需靠context超时、channel协作等方式实现“类抢占”,锁释放必须显式调用Unlock。
-
Go中可比较类型可作map键,包括基本类型、指针、可比较数组和结构体;切片、map、函数及含不可比较字段的结构体不能作键,需注意NaN和指针比较的语义问题。
-
io.Copy是Go中高效处理流式数据的核心方法,通过自动缓冲机制简化了文件、网络等场景下的数据复制,支持任意实现io.Reader和io.Writer的类型,并可结合io.Pipe实现并发流处理,提升I/O性能。
-
context.Context是链路追踪的起点,因Go无隐式上下文传递机制,必须通过它显式携带traceID/spanID,否则跨goroutine或服务调用时链路断裂。
-
gomodtidy是基于模块图的依赖收敛工具,仅保留导入图中可达的模块并补全缺失依赖,但会保留test文件、间接引用、embed/generate/cgo相关及replace/exclude干预的依赖。
-
应按业务域而非技术层划分包结构,如internal/user、internal/order,每包内含handler.go、service.go等;用internal限制可见性;service依赖接口而非具体实现;模块边界依限界上下文持续演进。
-
安全提取分页参数需校验并设默认值:page默认1、size默认20且上限100;数据库应避免OFFSET深翻页,改用游标分页;响应结构体封装元信息,HasNext依实际查满判断;分页逻辑不宜放中间件,宜抽象为纯函数。
-
os.Read比bufio.Reader.Read慢因每次调用均触发系统调用,而后者用4KB缓冲区减少syscall频次;建议顺序读取时统一用bufio.NewReader,小粒度读取收益更明显。
-
使用高效结构体标签、复用Encoder/Decoder、避免反射及采用高性能库可显著提升Go中JSON序列化性能。
-
数据库连接池初始化必须在main()开始时完成,需调用sql.Open和db.Ping验证,并设MaxOpen/IdleConns;DSN必须含charset=utf8mb4;推荐sqlx或gorm封装;测试须用独立实例或sqlmock。
-
Go数组传参默认值拷贝,[3]int是数组、[]int是切片;数组赋值/传参全量复制,修改副本不影响原数组;避免拷贝需传*[3]int指针;切片传参拷贝结构体但共享底层数组,元素修改生效,append或切片操作不反馈原变量。
-
用URL路径做版本标识最稳妥,因在反向代理、API网关、缓存、日志追踪中零歧义;Header或Query方式易被中间件丢弃、调试困难、测试不便。