-
Go语言标准库的time包可直接计算两个时间点之间的差值,支持纳秒级精度,并自动处理闰年、时区和日历规则,无需第三方依赖。
-
Go接口是隐式实现的方法集合,定义时仅声明方法签名,结构体自动满足所有方法即实现接口;支持嵌套组合行为,通过类型断言安全转换具体类型。
-
Go语言中所有参数传递均为按值传递,传递指针时实际传递的是指针副本,但副本仍指向同一内存地址,从而可修改原始变量。
-
优先选用sha256、AES-GCM等高效算法,复用cipher与hash实例,利用sync.Pool和Reset()减少开销,并通过goroutine并行处理独立任务,在保证安全前提下提升性能。
-
锁竞争导致goroutine频繁阻塞和调度开销,拉高延迟、降低吞吐;应通过trace定位竞争、细化锁粒度、慎用RWMutex并避免defer误用。
-
Go连MongoDB卡住或超时主因是DNS解析失败、网络不通或MongoDB未监听预期地址;本地用localhost,Docker需用host.docker.internal或服务名;默认bindIp限制远程连接;连接字符串须含端口;应显式设context超时;filter须用bson.M且字段名大小写敏感;结构体需bsontag映射;ObjectId必须为primitive.ObjectID;全局复用*mongo.Client避免连接池耗尽。
-
本文详解httprouter与Alice中间件组合使用的常见类型错误,指出router.GET不接受http.Handler而需改用router.Handler方法,并提供可运行的修复方案与最佳实践。
-
使用context.WithTimeout可创建自动取消的上下文,通过select监听ctx.Done()实现goroutine超时控制,避免资源浪费。
-
Go的http.Client默认启用连接复用,但服务端返回Connection:close、客户端设置req.Close=true或未读取完resp.Body均导致复用失效;需始终调用resp.Body.Close(),合理配置Transport参数并验证复用效果。
-
GoWeb路由权限控制通过中间件+角色验证实现:先定义角色常量与权限映射,登录后将角色存入context,再用requireRole中间件比对角色并拦截非法请求,支持多角色及等级继承。
-
Go微服务接口治理需从协议设计、错误表达、版本演进、可观测性四层面同步约束:HTTP须用结构化ErrorResponse,错误需映射为可识别Code;版本靠Header+Struct双控;gRPC须严守Protobuf兼容规则;可观测性须全链路透传trace_id。
-
XML与Gostruct映射需手动通过xmltag精确绑定标签名、属性及层级,否则字段解析为空;大小写、连字符、下划线须完全一致,属性用,attr标记,重复标签用xml:"parent>child"或嵌套struct处理。
-
使用OpenTelemetry可在Golang微服务中实现调用链追踪,通过初始化TracerProvider、配置Exporter(如Jaeger)、在HTTP/gRPC中间件传递TraceContext,并为关键操作创建Span来收集trace数据;跨服务调用时利用W3CTraceContext标准字段(如traceparent)实现上下文传播,确保链路连续;结合Jaeger或Zipkin可视化调用链,便于按服务、耗时等条件查询分析;同时将trace_id写入日志,与ELK或Loki联动提升排错效率;需
-
Go语言testing包是官方轻量高效内建测试框架,需将测试函数置于_test.go文件、以Test开头、接收testing.T参数;用t.Error/t.Fatal等方法报错,支持t.Run子测试和gotest-v/-cover等实用选项。
-
WaitGroup用于主goroutine等待其他goroutine完成,Add必须在go语句前调用且与启动goroutine数量匹配,否则导致提前返回或panic;计数器初始为0,Done等价于Add(-1)。