Go教程技术文章
-
本文介绍如何为Go中返回多个值的函数编写清晰、可维护的表格驱动测试,通过结构体字段映射各返回值,并提供完整示例与最佳实践。166 收藏 -
是的,Gonet包在Windows上自Go1.9起真走IOCP,但仅限net.Conn相关操作(Listen、Accept、Read、Write);os.Open、filepath.WalkDir等仍为同步Win32调用,不进完成端口。166 收藏 -
Golang · Go教程 | 3星期前 | goroutine · Context · 超时控制 · Go教程 · 后端开发 · Go Goroutine context 超时控制 WithTimeout Done QueryContext
本文用完整工作流讲解 Go context 超时控制:从 HTTP 入口创建超时预算,把 ctx 传给 DB 查询和远程请求,到 goroutine 监听 Done、及时退出并释放资源,最后给出验证和上线清单。166 收藏 -
使用ConfigMap挂载配置文件并结合fsnotify监听实现Go服务配置热更新,避免重启Pod。165 收藏 -
使用openzipkin/zipkin-gov0.5初始化tracer并配对HTTP中间件是唯一稳定上报、形成跨服务链路的方法;其他库已归档且不兼容Zipkinv2API,会导致静默丢span或400错误。165 收藏 -
更新Go依赖需通过goget结合gomodtidy等命令精准管理;常用gogetmodule@version更新特定版本,goget-u升级直接依赖至最新兼容版(不跨主版本),并用gomodtidy清理冗余依赖、同步go.sum,确保依赖一致性。165 收藏 -
最稳导出方式是用excelize.NewFile()写数据后直接file.Write(w),设Content-Type为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet、Content-Disposition带ASCII文件名,禁用SaveAs;字符串需设NumFmt:49文本格式,长数字加单引号,大文件用SetSheetRow批量写,严防中间件污染响应流。165 收藏 -
Golang中反射与闭包结合可在运行时动态调用方法并注入上下文逻辑,如通过DynamicCaller函数为不同插件创建带日志功能的调用闭包,实现通用化、可扩展的系统处理。165 收藏 -
必须区分/healthz和/readyz:/healthz仅检查进程存活(时钟、goroutine、HTTPaccept),/readyz同步验证依赖(DB、Redis等);/readyz需≤3s响应、用atomic.Bool缓存探测结果、返回503而非500。165 收藏 -
Go编译C兼容库须用cgo,以//export导出函数,禁用Go运行时;-buildmode=c-archive生成.a和头文件,要求无main()、仅C兼容类型、无运行时依赖。165 收藏 -
Go标准库log不支持按日期切割,需用lumberjack封装或rotatelogs等成熟方案;手动SetOutput轮换易致竞态、日志丢失、句柄泄漏。165 收藏 -
Go的sync.Mutex包含状态机、自旋、信号量和饥饿模式四层逻辑,非简单CAS;Lock()性能波动源于状态切换,其state字段位布局稳定但不可直接操作,应避免手写锁逻辑。165 收藏 -
ants.NewPool默认不支持动态扩容,需显式配置WithExpiryDuration、WithPreAlloc等参数并调用Tune()才能启用;未配置时超出容量会阻塞而非扩容,常见误判为“扩容失效”。165 收藏 -
Go1.18+分表分库路由函数应优先用泛型,因其类型安全、避免interface{}的panic风险;hash路由比mod更稳定,需用&(n-1)优化取模并处理负值;热更新需原子替换函数指针;跨分片JOIN不属路由层职责。165 收藏 -
裸调用nats.Connect易因网络抖动断连不恢复,需显式配置重连策略(MaxReconnects、ReconnectWait、ReconnectJitter)、TLS前缀、凭证分离,并初始化JetStream上下文;消息持久化须服务端启用JetStream、客户端创建流、订阅启用Durable与DeliverAll。165 收藏