-
Go反射通过reflect包实现,核心是Type和Value;第一律:接口可转反射对象;第二律:反射对象可还原为接口;第三律:修改需可设置;常用于序列化、ORM、配置绑定等场景,但性能开销大,应避免在热路径使用。
-
需先调用r.ParseMultipartForm(maxMemory),maxMemory建议设为32<<20(32MB),否则大文件会耗尽内存或全部写入磁盘;漏调用或传0将导致r.MultipartForm.File为nil或性能严重下降。
-
Go错误处理应使用fmt.Errorf(推荐%w包装保留错误链)、%v打印错误、%q安全插值字符串,并统一用log包而非fmt输出错误,确保可调试、类型安全且符合Go习惯。
-
Go通过panic和recover机制捕获运行时错误,recover仅在defer函数中有效,可将异常转为error处理;在Web服务中常通过中间件全局捕获panic,防止程序崩溃;但recover无法捕获子goroutine或系统级故障引发的panic。
-
最可靠方式是用os.Stat配合os.IsNotExist判断:调用os.Stat(path)后,若!os.IsNotExist(err)为真则文件存在;它返回元数据且语义明确,优于os.Open或错误字符串比较。
-
高可用RPC架构核心是服务不中断、扩容不改代码、故障自动绕过,关键在服务注册发现(Consul/Etcd自动注册与监听)、客户端负载均衡(gRPC策略或自研健康探测轮询)、熔断重试超时(分级超时、幂等重试、gobreaker熔断)及多实例协同部署。
-
Go语言通过GoModules实现依赖自动更新,提升开发效率与安全性。首先使用gomodinit初始化项目并生成go.mod文件,GO111MODULE=on启用模块支持;接着运行golist-mall查看当前依赖,golist-u-mall检测可升级版本;根据需要执行goget更新指定或全部依赖,如goget-u./...升级次要版本,goget-u=patch./...仅更新补丁版;建议结合GitHubDependabot或RenovateBot实现自动化更新,CI中添加golist-u检测以通知依赖
-
Go语言支持加减乘除取余运算,适用于整型和浮点型,需注意类型转换与除零问题,自增自减为语句不可用于表达式,可通过函数封装实现简易计算器。
-
Go本地开发环境配置只需安装Go、设置GOPATH与gomod、配置编辑器支持即可;推荐用最新稳定版,通过gomodinit初始化项目,配置goproxy可解决国内模块拉取问题。
-
逃逸分析是Go编译器决定变量分配在栈或堆的关键机制。若变量生命周期未逃出函数作用域,则栈分配;否则堆分配。常见逃逸场景包括:返回局部变量指针、闭包捕获、赋值给全局引用、接口传递等。栈分配高效且无需GC,堆分配增加回收开销。使用gobuild-gcflags="-m"可查看逃逸分析结果,提示如“escapestoheap”或“notescaped”。优化建议:避免返回局部指针、减少闭包引用、慎用interface{}、合理使用指针接收器及sync.Pool。理解逃逸分析有助于编写高性能、低GC压力的Go代码
-
反射通过动态解析结构体字段与标签实现序列化,如使用reflect.TypeOf获取类型信息,遍历字段并读取json标签,结合Field(i)和Tag.Get("json")构建键值对,同时检查字段导出性,从而支持自定义编码逻辑。
-
Go中HTTP重试需区分可重试错误(5xx、408、429、网络超时/拒绝)与不可重试错误(400/401/403/404等),结合嵌套context控制单次与总超时,采用指数退避+抖动,并封装RetryableClient避免资源泄漏。
-
Go中避免slice底层复制需用unsafe.Pointer构造视图,sync.Pool复用临时对象须清空内容且防逃逸,string与[]byte转换应优先用unsafe.String零拷贝,struct字段按大小倒序排列可减少padding和cachemiss。
-
Go的httptest包支持内存中HTTP接口测试:NewRecorder用于单元测试单个handler,NewServer用于集成测试完整服务;需配合依赖注入与mock实现隔离。
-
select语句用于多channel通信选择,监听多个case中channel操作,一旦某channel就绪即执行对应case,多个就绪时随机选一个,防止依赖。