-
sync.Pool适合生命周期短、创建开销高、状态可重置的临时对象,如gin.Context、fmt.pp等;不适合数据库/TCP连接、有外部依赖或状态不可控的对象。183 收藏 -
该用reflect.Type时:需精确匹配自定义类型、访问结构体字段名、检查方法集或打印可读类型名;该用reflect.Kind时:只关心数据“形状”,如遍历切片、解包指针或序列化通用逻辑。132 收藏 -
合理拆分任务并绑定CPU核心可提升Go并发性能:通过GOMAXPROCS启用多核,分片处理数据,结合x/sys/unix设置线程亲和性,减少上下文切换与缓存失效。431 收藏 -
外观模式在Go中是通过struct+interface+显式组合实现的接口封装策略,用于隐藏子系统复杂性,需依赖注入、错误映射、业务语义命名,并避免过度封装。299 收藏 -
应该从初级项目开始做权限控制,但必须极简:用中间件+context解耦校验逻辑,硬编码permRoutes映射Method:Path到权限字符串,避免过早引入casbin等复杂方案。450 收藏 -
Go文件I/O直白封装系统调用,os.File需显式Close防fd泄漏;os.Open等价于只读OpenFile;大文件须用bufio.Scanner流式处理,os.ReadFile仅适用于小配置文件。215 收藏 -
GoModules应禁用vendor,统一启用GO111MODULE=on;go.mod须提交且不改//indirect行;接口定义下沉至独立api模块;日志traceID须透传并绑定context。455 收藏 -
Go语言中,若结构体方法使用值接收器操作切片字段,实际修改的是结构体副本,原结构体字段不受影响,因此切片内容看似“丢失”——根本原因是未通过指针修改原始实例。371 收藏 -
reflect.Convert仅支持底层类型相同或明确定义的表示转换,不支持语义转换(如int64转string、[]byte转json.RawMessage),需分层处理:底层兼容→接口实现→基础类型手动分支→递归反射。448 收藏 -
Go数据库配置需正确注册驱动、校验DSN格式、设置连接池参数、用PingContext验证连接,并通过环境变量安全管理DSN。449 收藏 -
判断slice是否为空应优先用len(x)==0;仅在类型未知的泛型/反射场景下,才通过reflect.ValueOf(v).Kind()==reflect.Slice并调用.Len()==0判断,nilslice同样返回true。110 收藏 -
Go中匿名函数需用括号包裹后加()立即执行,如func(){fmt.Println("hello")}();可带参返回值,如result:=func(x,yint)int{returnx+y}(3,4);须赋值变量复用或传参使用。452 收藏 -
选型取决于需求:若追求极致性能且服务结构简单,优先选择net/http;若需快速开发并利用丰富功能,Gin更合适。net/http优点在于零依赖、稳定性强且性能优异,适合高并发场景,使用方式基础但高效;Gin则提供快速路由、内置中间件、结构清晰等优势,提升开发效率与可维护性。两者性能差距极小,实际业务中可忽略不计。建议:性能敏感服务用原生包,团队协作和快速开发选Gin,也可从net/http起步按需引入框架。335 收藏 -
Go原生map非并发安全,多goroutine读写会panic;sync.Map适用于读远多于写的场景,但不支持len()和强一致性遍历,使用需注意类型断言与-race检测。241 收藏 -
HTTP服务需设ReadTimeout和WriteTimeout防慢连接拖垮goroutine调度;数据库等阻塞操作须用context控制;复用http.Client并配置Transport参数;合理使用sync.Pool缓存小对象。490 收藏