golang
已收录文章:14427篇
-
Go语言中有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件244 收藏
-
为了避免这种情况,我们的服务应该设置超时时间。 前面的入门教程 Go gRPC环境安装教程示例详解 Go gRPC教程实现Simple RPC Go gRPC服务端流式RPC教程示例 Go gRPC服务客户端流式RPC244 收藏
-
答案:文章介绍了Go语言中网络请求的常见错误类型及重试机制实现方法。首先区分连接失败、HTTP状态码异常和读写错误,判断临时性与永久性错误以决定是否重试;接着给出带指数退避的重试函数示例,处理5xx、429等可重试情况;然后通过自定义RoundTripper实现透明重试,避免修改业务代码;最后强调非幂等请求慎用重试、设置合理超时、使用context控制超时、记录日志及结合熔断器等最佳实践,提升客户端健壮性。243 收藏
-
Go的GC通过三色标记清除算法追踪指针引用,从根对象出发标记可达对象,回收无指针引用的内存;长时间持指针会导致内存保留,增加GC压力,可通过合理使用值类型、及时置nil、对象池、预分配和逃逸分析优化。243 收藏
-
使用Golang实现WebSocket服务的关键在于选择合适的库并理解基本流程。一、推荐使用成熟的第三方库gorilla/websocket,可通过goget命令安装;二、通过创建HTTP服务器并在指定路由升级连接实现服务端搭建,每个连接由独立协程处理,示例代码展示了消息的接收与回传;三、客户端同样利用该库建立连接并实现消息收发;四、实际应用中需引入连接池和广播机制管理并发连接,如使用全局map维护连接及通过channel实现消息广播。结构清晰、注重细节是成功实现的关键。243 收藏
-
规约模式在Golang中通过接口和结构体实现,首先定义包含IsSatisfiedBy方法的规约接口,接着创建具体规约如AgeSpecification验证用户年龄,然后通过AndSpecification、OrSpecification等组合规约实现复杂规则,最后在业务逻辑中使用这些规约进行验证。应用场景包括电商商品筛选、金融系统条件验证等需组合判断的场景。避免过度复杂化的方法有保持规约单一职责、避免过度组合、适当抽象及选用合适模式。单元测试可通过testing包编写测试用例验证不同情况下的返回值是否符合243 收藏