当前位置: 首页 > news >正文

视频网站如何做seo邢台123式的网站怎么做

视频网站如何做seo,邢台123式的网站怎么做,html网站模版,转转免费假链接制作器【Gin】智慧架构的巧妙砌筑#xff1a;Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下) 大家好 我是寸铁#x1f44a; 【Gin】智慧架构的巧妙砌筑#xff1a;Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)✨ 喜欢的小伙伴可以点点关注 #x1f49d; …【Gin】智慧架构的巧妙砌筑Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下) 大家好 我是寸铁 【Gin】智慧架构的巧妙砌筑Gin框架中控制反转与依赖注入模式的精华解析与应用实战(下)✨ 喜欢的小伙伴可以点点关注 前言 本次文章分为上下两部分上部分为对理论的介绍下部分为具体的底层代码深度剖析和编程实践感兴趣的伙伴不要错过哦~ 在现代软件开发中控制反转IoC和依赖注入DI模式作为构建灵活、可扩展系统的重要设计理念已经成为许多框架和应用中不可或缺的一部分。特别是在Gin框架这样的轻量级、高效的Web框架中合理运用IoC和DI模式能够显著提升代码的可测试性、可维护性和扩展性从而帮助开发者构建出更加健壮和高效的应用程序。本文将深入探讨控制反转和依赖注入模式在Gin框架中的精华解析与应用实战为开发者提供全面的技术指导和实用的应用策略。 控制反转和依赖注入模式通过解耦组件之间的依赖关系将对象的创建和管理责任交由外部容器来处理从而有效地降低了系统中各模块之间的耦合度。在Gin框架中这种模式可以被广泛应用于路由管理、中间件配置以及服务依赖注入等关键领域使得开发者能够更加灵活地配置和扩展应用的功能和行为。本文旨在通过深入的技术讨论和实例演示帮助开发者深入理解如何利用IoC和DI模式优化和增强其在Gin框架中的应用程序架构。 关键的类图和时序图 (1) 类图 在Gin框架中依赖注入具体体现在Gin的引擎对象engine的Run方法内部处理业务时将引擎对象engine注入到Run方法中进行业务的处理。控制反转则体现在处理业务的控制权从Gin的引擎对象engine到net/http库再反转到Gin的引擎对象engine进行真正的业务处理。 依赖注入 角色说明 Client 客户端类依赖注入的使用者。 持有一个或多个服务对象的引用通过构造函数注入或者方法注入的方式获取服务实例并调用服务对象的方法。 Handler 服务接口定义了客户端使用的操作接口。 Handler1 具体的服务实现类实现了Handler接口的方法。 图69 依赖注入类图 由上图69可得先定义客户端类Client依赖注入的使用者。持有一个或多个服务对象的引用通过构造函数注入或者方法注入的方式获取服务实例并调用服务对象的方法。再声明服务接口Handler定义了客户端使用的操作接口及需要实现的方法Operation()。最后实现多个具体的服务实现类真正实现了Handler接口的方法Operation()。 控制反转 Client 客户端类创建一个处理业务的Gin引擎对象engine Http IoC容器负责管理和解析依赖对象用于将依赖注入到engine对象中。 Handler 服务接口或者抽象类定义了依赖对象的操作接口。 ConcreteHandler 真正处理业务对象的类将控制权从Http中转移到到Gin引擎对象engine。 由Gin引擎对象engine来实现Gin框架内部的真正处理业务的接口Handler来真正处理业务实现控制权的反转。 图70 控制反转类图 由上图70可得先定义Client客户端类创建一个处理业务的Gin引擎对象engine。再定义Http类IoC容器负责管理和解析依赖对象用于调用http.ListenAndServe(engine)方法将依赖注入到engine对象中。定义Handler服务接口定义了依赖对象的操作接口声明了真正处理业务的方法ServeHttp()。最后定义ConcreteHandler类聚合Engine对象是真正处理业务对象的类将控制权从Http中转移到到Gin引擎对象engine。由Gin引擎对象engine来实现Gin框架内部的真正处理业务的接口Handler来真正处理业务实现控制权的反转。 (2) 时序图 依赖注入 图71 依赖注入类图 由上图71可得Client 在方法中向 Handler接口 发送注入服务对象的请求Dependency。Handler 将获取到的依赖对象注入到 ConcreteHandler 中。ConcreteHandler 接收到注入的服务对象后调用依赖对象的方法执行具体的操作。ConcreteHandler 执行操作后将结果返回给 Handler。最终结果从 Handler 传递回 Client。 控制反转 图72 控制反转类图 由上图72可得客户端Client先创建Engine类对象engineengine对象拥有一开始的控制权。接着调用http.ListenAndServe(engine)方法将处理业务的控制权转移到Http类Http类中通过调用engine.ServeHTTP()方法将控制权反转给Engine类对象。 主程序的流程 依赖注入: 由下图73可得程序开始Client客户端注入依赖Dependency请求到Handler业务对象Handler业务对象将依赖转发到真正处理业务的对象ConcreteHandler接着真正处理业务的对象ConcreteHandler处理业务真正处理业务的对象ConcreteHandler处理业务完毕后沿着调用顺序依次返回处理结果给Client客户端程序结束。 图73 依赖注入主程序流程图 控制反转: 由下图74可得程序开始Client客户端先创建Gin引擎对象engineengine对象具有处理业务的控制权。如果控制权未反转则将控制权转移到HTTP对象中。之后反转控制权将控制权反转给engine对象控制权反转后engine对象实现Gin框架内部的ServeHTTP()方法来真正处理业务业务处理完毕后任务结束。 图74 控制反转主程序流程图 程序模块之间的调用关系 图75 依赖注入和控制反转调用剖析图 由上图75可得 Gin 框架的依赖注入和控制反转涉及的角色如下 依赖注入 engine.Handler() 方法的调用体现了依赖注入的思想。在 http.ListenAndServe(address, engine.Handler()) 中engine.Handler() 返回了一个实现了 http.Handler 接口的具体对象这个对象可能是一个路由处理器或中间件链的实例。 Engine 结构体的设计允许将不同的处理逻辑如路由、中间件等注入到Run()方法中。这种方式使得 Run() 方法可以处理各种不同的请求处理逻辑而不需要直接在 Run() 方法内部硬编码这些逻辑。 控制反转 控制反转的核心思想是将对象的创建和管理权力反转给外部。在这段代码中http.ListenAndServe(address, engine.Handler()) 中的 http.ListenAndServe 是一个框架外部的方法它接受一个 http.Handler 对象作为参数。 Run() 方法并不直接控制和管理 http.Server 的创建和启动过程而是将这一职责委托给了 http.ListenAndServe 函数。框架的用户可以通过传入不同的处理器即 engine.Handler() 返回的对象来定制 HTTP 服务器的行为这样实现了控制反转。 角色说明 Engine 结构体的方法 Run() 扮演了主动者的角色负责组织和启动整个框架的运行流程。它通过依赖注入的方式获取所需的处理器并将控制权转移给外部的 http.ListenAndServe 方法实现了控制反转。 下面是对上图75各层次调用关系的描述 依赖注入 客户端调用router.Run(:8883)方法启动HTTP服务器Run方法内部http.ListenAndServe(address, engine.Handler())处理业务对象为router,从外部传入,依赖于外部的engine对象而非本方法内自己创建的对象。 控制反转 客户端调用router.Run(:8883)方法启动HTTP服务器Gin框架启动时将处理对象的控制权移交给net/http的http.ListenAndServe(address, engine.Handler())处理net/http的http.ListenAndServe(address, engine.Handler())不对Gin框架的业务进行处理而是将Gin框架的控制权移交给Gin框架原来的engine对象engine.Handler()进行处理engine.Handler()实现Gin框架内部自己定义的ServeHttp()方法进行业务处理实现控制反转。 在上图的基础上下面对各个模块的代码进行深入剖析 依赖注入 客户端调用Run方法启动HTTP服务器。 整理依赖注入和控制反转模型如下 图76 依赖注入和控制反转模型图 图77客户端调用Run方法 图78 engine对象的 Run方法 代码位置gin.go的389行、399行 Run方法中调用http.ListenAndServe(address, engine.Handler())http.ListenAndServe 是 Go 标准库 net/http 提供的一个函数用于启动一个 HTTP 服务器监听指定的地址。address 是一个字符串参数表示服务器监听的地址和端口号如 :8080。engine.Handler() 是 Engine 结构体的方法返回一个实现了 http.Handler 接口的对象。在 Gin 框架中这个对象通常是处理所有 HTTP 请求的核心组件包括路由处理器和中间件链。http.ListenAndServe(address, engine.Handler()) 的作用是启动一个 HTTP 服务器并将请求交给 engine.Handler() 处理体现了依赖注入的思想。 控制反转: 同样地客户端调用Run方法启动HTTP服务器。 图79 客户端调用Run方法 Gin框架启动时将处理对象的控制权移交给net/http的http.ListenAndServe(address, engine.Handler())处理。 图80 engine对象的 Run方法 代码位置gin.go的389行、399行 net/http的http.ListenAndServe(address, engine.Handler())不对Gin框架的业务进行处理。 图81 engine的Handler()方法 代码位置gin.go的228-235行 228行这是一个 Engine 结构体的方法定义返回类型是 http.Handler 接口。这意味着 Handler() 方法返回一个实现了 http.Handler 接口的对象可以处理 HTTP 请求。 229行if !engine.UseH2C {engine.UseH2C 是 Engine 结构体中的一个布尔类型的字段或属性。根据其值来决定返回什么样的 http.Handler 对象。return engine如果 engine.UseH2C 的值为 false则直接返回 engine 自身。在 Gin 框架中engine 实际上是 Engine 结构体的实例它本身已经实现了 http.Handler 接口通常是一个 http.ServeMux即路由器。 233行h2s : http2.Server{} 如果 engine.UseH2C 的值为 true则创建一个新的 http2.Server 的实例并将其赋值给 h2s 变量。http2.Server 是 Go 标准库中用于支持 HTTP/2 协议的服务器端的结构体。 234行return h2c.NewHandler(engine, h2s) 使用h2c.NewHandler函数创建一个新的处理器。h2c 是一个库用于将 HTTP/2 请求映射到 HTTP/1 处理程序。该函数接受两个参数engine传入当前的 Engine 实例作为 HTTP/1 处理程序的实现。h2s传入前面创建的 http2.Server 实例用于支持 HTTP/2 协议的相关设置和处理。返回的对象也是一个 http.Handler 接口这样可以保证 Handler() 方法返回的对象在不同的协议版本HTTP/1 或 HTTP/2之间可以透明切换根据配置的 engine.UseH2C 自动选择合适的处理方式。 依赖注入和控制反转案例及调试分析 依赖注入是一种设计模式它通过外部实体来提供一个类或对象所依赖的对象。简单来说就是把依赖关系从一个对象转移到另一个对象从而实现解耦和灵活性。控制反转是一种设计原则它反转了传统的程序控制流程将控制权交给了外部系统或容器。即不再由调用方决定依赖对象的获取方式而是由外部容器管理和提供依赖。 基于上述描述编写测试案例如下 图121 定义UserService服务接口 UserService 是一个接口定义了获取用户信息的方法 GetUser。返回客户端输入的用户ID。 图122 声明UserService的一个实现 UserServiceImpl 结构体实现了UserService接口即它必须实现 GetUser(userID string) string 方法。 图123 定义GetUser()方法 UserServiceImpl 结构体实现了GetUser(userID string) string方法这里假设它通过 userID 获取用户信息并返回字符串格式化的结果。 图124 编写客户端代码 在 main 函数中首先创建了一个 Gin 实例 router。控制台输出控制权由Gin管理这句话用于观察控制反转。创建了userService实例这里是 UserServiceImpl 的一个对象。调用GET方法打印控制权由net/http管理这句话用于观察控制反转。使用依赖注入的方式将 userService 注入到 Gin 的路由处理器中当收到GET /user/:id的请求时从 URL 中获取 id 参数并调用 userService.GetUser(userID) 方法来获取用户信息。将用户信息作为字符串响应给客户端。打印控制权由Gin管理用于观察控制反转。 调试分析 启动测试案例的服务端,完成对象的依赖注入并等待客户端请求的发送。运行测试依赖注入与控制反转案例成功 图125启动测试案例成功 使用API测试工具APIfox向服务器监听的端口发送GET请求并得到服务端发送的响应信息依赖对象处理业务成功并将响应信息回写给客户端调试依赖注入和控制反转案例成功 图126 Apifox发起GET请求 依赖注入和控制反转测试结果 使用API测试工具APIfox向服务器监听的端口发送GET请求并得到服务端发送的响应信息依赖对象处理业务成功并将响应信息回写给客户端测试依赖注入案例成功 图146依赖注入客户端测试结果 接下来观察控制台的输出信息是否和预期的一致一致则说明实现了控制反转 先输出:控制权由Gin管理 再输出:控制权由net/http管理 最后又输出控制权由Gin管理 观察发现控制台输出顺序与预估的一致 先输出:控制权由Gin管理 再输出:控制权由net/http管理 最后又输出控制权由Gin管理 说明实现控制反转成功 图147 控制反转测试结果 结语 通过本文的探讨与分析我们详细探索了控制反转和依赖注入模式在Gin框架中的应用与实践。这些模式不仅能够有效地简化复杂系统的设计与维护还能够提升系统的灵活性和可扩展性使得开发者能够更加轻松地应对变化和挑战。在实际项目中合理运用控制反转和依赖注入模式能够显著提高代码的质量和可读性为Gin框架应用的长期发展奠定坚实的技术基础。希望本文能够为广大开发者提供有益的参考和实用的指导帮助他们在实际应用中充分发挥IoC和DI模式的优势打造出更加强大和灵活的软件系统。 看到这里的小伙伴恭喜你又掌握了一个技能 希望大家能取得胜利坚持就是胜利 我是寸铁我们下期再见 往期好文 保姆级教程 【保姆级教程】Windows11下go-zero的etcd安装与初步使用 【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero 【Go-Zero】手把手带你在goland中创建api文件并设置高亮 报错解决 【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项 【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 【Go-Zero】【error】 failed to initialize database, got error Error 1045 (28000):报错解决方案 【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘‘localhost‘ (using password: YES)报错解决方案 【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“报错解决方案 【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案 【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案 Go面试向 【Go面试向】defer与time.sleep初探 【Go面试向】defer与return的执行顺序初探 【Go面试向】Go程序的执行顺序 【Go面试向】rune和byte类型的认识与使用 【Go面试向】实现map稳定的有序遍历的方式
http://www.pierceye.com/news/888437/

相关文章:

  • 淘宝客网站域名备案吗漂亮的ppt模板大全免费
  • 西安外贸网站开发网站后端做留言板功能
  • 自建淘宝客APP网站模板制作网站的公司
  • 最佳线上网站制作模板网站开发 企业 定制系统
  • 怎么将网站设置为首页百度seoo优化软件
  • iis6建设网站浏览wordpress显示在线人数
  • 一键制作单页网站女做受网站
  • 网站推广广告 优帮云开发公司资质哪里查
  • 沈阳网站建设思路做海报的话网站
  • 扬州网站建设suteng崇左网页设计
  • 中文网站模板html做网站 最好的开源cms
  • 个人资料展示网站网站建设网络推广外包服务商
  • 外贸网站建设有什么需要注意的吗网站建设职业发展前景
  • 企业网站建设方案效果版权WordPress
  • 做网站知道访客ip汝州文明建设网站
  • 吴江建设局网站打不开了网站备案信息地址
  • 长沙网站建设优化局域网网站架设软件
  • 重庆企业网站建设解决方案seo关键词怎么优化
  • 信誉好的大良网站建设做的好的ppt下载网站有哪些
  • 栖霞网站定制手机网站图片自适应代码
  • 企业网站管理中心网站海外推广
  • 书店商城网站设计万网虚拟主机做网站教程
  • 文化类网站是不是休闲娱乐类网站wordpress插件 ftp
  • 织梦系统网站吉林省建设安全厅官方网站
  • 网站推广网站关键词排名怎么做建站教程wp
  • 用织梦系统做网站产权网站建设需要掌握什么技术
  • 南宁seo平台费用安徽网站关键词优化排名
  • 李贤威 wordpress甘肃搜索引擎网络优化
  • 网站建设的步骤图片过程9377将军
  • 做彩票网站需要什么服务器wordpress slug