-
Go中享元模式仅适用于高频创建、状态可分离且内存敏感的轻量对象,如Token、glyph等;多数场景用sync.Pool或结构体字面量更高效,字符串常量和iota本身已是天然享元。
-
Deployment的image字段必须为可拉取的完整镜像地址,如ghcr.io/yourname/myapp:v1.2;targetPort必须与Go程序实际监听端口一致;需配置readinessProbe保障服务就绪后再接入流量;ConfigMap/Secret挂载为文件时须改代码读取而非os.Getenv。
-
Go中可用sync.Map、chan和接口实现线程安全的观察者与Pub/Sub模式:EventBus用sync.Map存topic-handler映射,支持订阅/取消订阅、同步或异步发布事件,并可扩展通配符匹配与事件过滤。
-
new用于所有类型,分配零值内存并返回指针;make仅用于slice、map、chan,初始化后返回可直接使用的值。
-
在Go中直接int(f*1000)会因浮点精度丢失导致截断错误(如得1002而非1003),正确做法是先加0.5(正数)或减0.5(负数)再转int,实现四舍五入语义。
-
goroutine泄露典型表现为内存持续上涨、pprof显示大量runtime.gopark状态goroutine、HTTP响应变慢但CPU不高;主因是未监听ctx.Done()导致goroutine卡在select或time.Sleep中无法退出。
-
cron.New()后任务不执行是因为调度器默认暂停,必须显式调用c.Start()并阻塞主goroutine(如select{}),否则程序立即退出;秒级需cron.WithSeconds();停止时用sync.WaitGroup确保任务完成;时区需显式加载并fallback。
-
lambda.Start是Go函数在AWSLambda上运行的唯一入口,必须调用它注册事件循环;否则因无有效执行点导致fork/exec失败、冷启动超时且无日志;需严格遵循handler签名、交叉编译为Linux二进制、传递context并避免execformaterror。
-
log.SetFlags()通过位掩码控制日志元信息,如log.Ldate|log.Ltime|log.Lshortfile;SetPrefix()设置行首固定前缀;自定义时间格式需重写Output;推荐用log.New()创建独立实例而非修改全局logger。
-
Go中结构体必须用type显式定义,不可内联;字段导出性由首字母大小写决定,标签不影响可见性;初始化推荐字段名赋值方式;嵌入是组合而非继承;structtag须用反引号、空格分隔、双引号包裹值。
-
可通过调用sql.DB.Stats()获取实时连接池指标,包括OpenConnections、Idle、WaitCount和WaitDuration等快照值,需定时采集;DB.Ping()不反映池健康状况;合理配置SetMaxOpenConns、SetMaxIdleConns和SetConnMaxLifetime才能优化池行为;接入Prometheus时需按指标类型(gauge/counter)正确暴露。
-
在Go中,nil接口值不携带任何动态类型信息,因此无法通过x.(*T)断言为任意具体指针类型;类型断言要求接口值非nil且其动态类型必须精确匹配目标类型。
-
rpcserver:servicenotfound是因注册中心未连通或服务名不一致所致,需检查etcd/Nacos状态、配置地址、服务名大小写、启动顺序及-f参数;client调用超时则多因TLS未禁用,应加WithInsecure()。
-
装饰器模式通过接口和组合在Golang中实现功能增强,定义UserService接口后,BaseUserService提供基础实现,LoggingDecorator和CacheDecorator分别添加日志与缓存功能,支持链式叠加,调用顺序为外层到内层,适用于日志、监控、权限等场景,保持单一职责,提升代码复用性。
-
在Go的database/sql包中,Query和QueryRow在性能上几乎无差异——QueryRow内部直接调用Query并封装结果为*Row,额外开销仅为极小的函数调用成本,远低于网络传输和数据库执行本身。