-
必须用pgx/v5替代已归档的lib/pq;sql.Open报“unknowndriver”是因未导入驱动包,需import"github.com/jackc/pgx/v5"或import"github.com/jackc/pgx/v5/pgxpool";ScanNULL须用sql.NullString等,事务出错须立即Rollback。317 收藏 -
Elem()必须用于Kind为reflect.Ptr的指针类型reflect.Value,否则panic;正确用法是reflect.ValueOf(&v).Elem()以获得可修改值,而非reflect.ValueOf(v).Elem()。215 收藏 -
Go语言无原生AOP,需用函数装饰器、HTTP中间件、接口组合等手动织入横切逻辑;推荐高阶函数实现日志/监控,避免反射带来的性能与类型安全问题。397 收藏 -
Go接口是隐式实现的契约,只检查方法签名是否完全匹配;interface{}与any等价但语义不同;嵌入接口是方法集合而非继承;接口变量nil不等于底层值nil。438 收藏 -
lumberjack.Logger是最省心的日志切割方案,但仅支持按大小和按天轮转,不支持按小时、按分钟或自定义时间点切割;需显式设置Mode:0644保证可读性,并注意父目录存在、Windows文件占用、并发写入优化等问题。386 收藏 -
<p>不应手动调用epoll系统调用,因Go的net包已深度集成runtime.netpoll实现稳定高效的I/O多路复用;手动调用syscall.Epoll*会绕过调度器,导致goroutine永久挂起、M阻塞、连接泄漏甚至panic。</p>348 收藏 -
云环境中跨地域部署的核心约束是请求路由、状态一致性与故障隔离。需依赖基础设施层(DNS、负载均衡、服务发现、数据库多活)而非Golang本身,应用须适配地域感知、超时重试、避免手动双写,并将容错交给专业组件。399 收藏 -
最稳妥方式是用sync.WaitGroup+sync.Mutex保护错误切片:声明musync.Mutex和errs[]error,每个goroutine执行完后加锁append错误,WaitGroup等待全部完成再返回errs。339 收藏 -
Go接口幂等需分三层:redis.SetNX原子拦截(带EX、不拆步)、结构化缓存结果(含status/result/timestamp)、数据库唯一索引兜底;缺一不可。208 收藏 -
Go的goroutine栈扩容不是无限的,而是仅在函数调用前通过stackguard0检查触发“整体搬家”式复制;单帧过大、递归过深或跨CGO边界会直接panic,不扩容。396 收藏 -
Gotest默认禁用CGO,需设CGO_ENABLED=1;C内存管理易致use-after-free;gotoolcover不统计C代码;Windows下须统一MSVC或MinGW工具链。477 收藏 -
select分支执行顺序是伪随机轮询而非随机或按代码顺序;当多个case就绪时,Go以per-Goroutine伪随机起始索引轮询,防饿死但不可预测;default优先级最高,仅有一个case就绪则直接执行,全阻塞则goroutine挂起。101 收藏 -
Go语言中通过值拷贝或深拷贝实现原型模式:1.简单结构体直接赋值实现浅拷贝;2.含指针、slice等引用字段时需手动深拷贝避免数据共享;3.复杂结构可使用gob序列化实现通用深拷贝,但要求字段可导出。295 收藏 -
单节点WebSocket无法共享连接状态,因为连接绑定在独立进程的本地内存中,各节点的ClientManager.Clients互不相通;必须通过Redis等共享存储抽离元数据,实现跨节点的状态同步与消息路由。400 收藏 -
%+v打印结构体时指针字段只显示地址而非实际值,因它不自动解引用;需手动解引用、用spew.Dump递归展开或实现Stringer接口定制输出。360 收藏