ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 Go 从零搭建 Web 框架:项目规划、GOPATH 工作区与 MVC 数据流设计(build-web-application-with-golang 13.1)

用 Go 从零搭建 Web 框架:项目规划、GOPATH 工作区与 MVC 数据流设计(build-web-application-with-golang 13.1) 文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载在动手编写任何 Web 应用之前先完成项目规划是决定后续开发效率的关键一步。本文以开源仓库 build-web-application-with-golang 第 13 章如何设计一个 Web 框架的开篇小节zh/13.1.md为核心系统讲解如何设置 GOPATH 工作区、如何理解并规划基于 MVC 模式的博客系统、如何设计请求数据流与目录结构以及一个最小化 Web 框架应包含哪些核心功能。读完本文你将掌握一套可复用的先规划、后编码的 Go Web 项目搭建方法论并能在后续章节中逐一实现路由、控制器、日志与配置等模块。为什么写代码前要先做项目规划做任何事情都需要做好规划Web 应用开发尤其如此。在开发博客系统之前需要明确三件事目录结构如何设置、整个项目的执行流程是怎样的、框架的各个模块如何划分。当我们理解了应用的执行过程接下来的设计编码就会变得相对容易。第 13 章的目标正是通过一个完整的博客系统示例让读者了解如何搭建自己的目录结构、如何实现路由、如何实现 MVC 模式最终构建出一个自己的 Web 框架。从仓库的章节脉络看zh/13.0.md这一章的结构规划依次是13.1 项目规划本文、13.2 自定义路由器设计、13.3 controller 设计、13.4 日志和配置设计、13.5 实现博客的增删改。也就是说本节是整章的地基目录、流程、架构一旦定好后续所有模块的实现都有章可循。搭建 Go 工作区GOPATH 与项目目录规范GOPATH 的两种设置方式GOPATH 是 Go 语言约定的工作区根目录可以理解为所有 Go 项目源码、依赖包和编译产物的存放位置。假设指定 gopath 是文件系统的普通目录名我们可以随便设置一个目录名然后将其路径存入 GOPATH。前面介绍过 GOPATH 可以是多个目录Windows 系统通过系统属性 → 环境变量设置环境变量 GOPATH效果如下图所示图中 GOPATH 被配置为F:\yunio\gopathLinux / macOS 系统只需在终端输入命令export gopath/home/astaxie/gopathGOPATH 下必须存在的三个目录无论采用哪种方式都必须保证 gopath 这个代码目录下面有三个目录pkg、bin、src。三个目录的分工如下目录作用src存放项目源码本次新建的博客项目 beeblog 就放在这里pkg存放编译后的包对象供链接使用bin存放编译生成的可执行文件新建项目的源码放在src目录下面当前博客项目暂定名为beeblog。配置完成后工作目录应位于$gopath/src下其中可以看到 beeblog 项目文件夹如下图所示需要说明的是本节描述的是 Go 1.x 早期版本GOPATH 模式下的标准工作区规范与本书成书年代的 Go 环境一致若使用较新版本的 Go Modules 模式项目可放在任意目录并通过go.mod管理依赖但 GOPATH 的目录组织思想源码、包、可执行文件分离仍然值得理解。架构选型基于 MVC 设计模式博客系统是基于**模型-视图-控制器MVC**这一设计模式构建的。MVC 是一种将应用程序的逻辑层和表现层进行分离的结构方式。在实践中由于表现层从 Go 中分离了出来它允许网页中只包含很少的脚本。MVC 的三个组成部分职责如下模型Model代表数据结构。通常来说模型类将包含取出、插入、更新数据库资料等这些功能。在本书博客系统中这一层由models包承担负责与 MySQL 交互。视图View展示给用户的信息的结构及样式。一个视图通常是一个网页但在 Go 中一个视图也可以是一个页面片段如页头、页尾还可以是 RSS 页面或其它类型的页面。Go 实现的template包已经很好地实现了 View 层中的部分功能。控制器Controller模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介并生成网页。控制器是整个 MVC 框架中必不可少的一环——Model 和 View 对于某些业务需求可以不写例如没有数据处理的逻辑、没有页面输出的 302 跳转但 controller 这一环节不可或缺。应用程序流程图请求数据流贯穿框架的六个步骤下图显示了项目设计中框架的数据流是如何贯穿整个系统的结合图中箭头方向一次 HTTP 请求从进入到响应共经历六个环节入口初始化main.go作为应用入口初始化运行博客所需的基本资源、配置信息并监听端口。路由转发路由功能检查 HTTP 请求根据 URL 以及 method 来确定由哪个控制器控制层来处理请求、转发资源。缓存命中如果缓存文件存在它将绕过通常的流程被直接发送给浏览器。安全检测在应用程序控制器被调用之前HTTP 请求和任一用户提交的数据将被过滤对应本书第 4 章表单验证、第 9 章 CSRF 防御等安全话题。控制器处理控制器装载模型、核心库、辅助函数以及任何处理特定请求所需的其它资源控制器主要负责处理业务逻辑。视图渲染输出视图层中渲染好的、即将发送到 Web 浏览器中的内容。如果开启了缓存视图首先被缓存用于以后的常规请求。这六步流程在后续小节中都有源码级的落地13.2 实现了第 2 步的存储路由 转发路由13.3 实现了第 5、6 步的 controller 基类与 Render 渲染13.4 实现了入口初始化所需的日志与配置模块13.5 则完整实现了博客的增删改查闭环。目录结构设计七个目录的职责划分根据上面的应用程序流程设计博客的目录结构设计如下|——main.go 入口文件 |——conf 配置文件和处理模块 |——controllers 控制器入口 |——models 数据库处理模块 |——utils 辅助函数库 |——static 静态文件目录 |——views 视图库main.go应用入口对应数据流第 1 步负责初始化资源、加载配置、注册路由、监听端口conf存放配置文件如数据库连接、监听端口等及配置解析模块对应 13.4 的配置设计controllers控制器入口存放各业务控制器对应 13.3 的 controller 设计models数据库处理模块封装数据存取逻辑对应 13.5 的 model 层基于 beedb 封装utils辅助函数库存放通用工具函数static静态文件目录图片、CSS、JS 等由框架的静态路由处理views视图库存放模板文件由 Gotemplate包渲染。这个目录结构严格与 MVC 三层对应models对应 Modelviews对应 Viewcontrollers对应 Controllermain.go与conf承担框架装配职责static、utils是必要的配套资源。最小化框架的功能规划为了实现博客的快速搭建本节基于上面的流程设计提出了一个最小化框架的规划框架应包含以下核心功能路由功能将 URL 与 HTTP method 映射到对应的处理逻辑。在 zh/13.2.md 中beego 的路由设计针对 Go 默认路由器的三个限制不支持/user/:uid这类参数匹配、无法限制 REST 方法、规则过多编写繁琐做了改进通过正则表达式支持参数与自定义匹配表达式如/users/:uid([0-9])通过路由到 struct 而非函数的方式支持 REST 方法分发。支持 REST 的控制器在 zh/13.3.md 中设计了Controller基类与ControllerInterface接口接口定义了Init、Prepare、Get、Post、Delete、Put、Head、Patch、Options、Finish、Render等方法默认实现返回 405 Method Not Allowed子类只需覆盖自己需要的方法。自动化的模板渲染Render方法支持通过全局变量AutoRender控制是否自动渲染支持 Layout 布局模板与默认模板命名规则ChildName/Method.tpl。日志系统在 zh/13.4.md 中实现了基于log.Logger的轻量级日志系统提供Trace、Debug、Info、Warn、Error、Critical六级日志与SetLevel分级控制。配置管理实现了keyvalue的 ini 风格配置解析器LoadConfig解析文件、Bool/Int/Float/String读取不同类型配置值。以上功能在 13.213.5 小节中被逐一实现最终在 zh/13.5.md 中组装为一个可运行、可增删改查的博客系统其目录结构与本节规划一一对应controllers下有index.go、view.go、new.go、edit.go、delete.go五个控制器models/model.go封装数据库操作views下包含layout.tpl、index.tpl、view.tpl、new.tpl、edit.tpl五个模板。规划到落地的映射框架设计如何指导后续实现把本节规划与仓库中后续章节的实现对照可以看到清晰的规划驱动实现链条本节规划项落地实现章节关键设计点路由功能13.2 自定义路由器设计controllerInfo存正则与控制器反射类型ControllerRegistor.Add编译路由ServeHTTP转发并分发 REST 方法REST 控制器13.3 controller 设计Controller基类 ControllerInterface接口方法默认 405自动化模板渲染13.3 controller 设计Render()按AutoRender全局变量控制支持 Layout 与默认模板名日志系统13.4 日志和配置设计六级日志 SetLevel分级 SetLogger自定义输出配置管理13.4 日志和配置设计ini 风格解析LoadConfig 类型化读取博客增删改查13.5 实现博客的增删改五个 REST 控制器 beedb 模型层 五个模板完成 MVC 闭环总结本小节介绍了博客系统从设置 GOPATH 到建立目录的基础信息简单介绍了框架结构采用的 MVC 模式、博客系统中数据流的执行流程最后通过这些流程设计了博客系统的目录结构。至此我们已经基本完成了框架的规划阶段接下来的几个小节将会逐个实现路由、控制器、日志、配置等模块并最终基于这套框架搭建出一个完整的博客系统。对希望深入实践的读者可继续阅读本章后续章节或直接查看本仓库 zh 目录下 13.213.5 的完整文档与源码示例。赞分享文档教程【免费下载链接】build-web-application-with-golangA golang ebook intro how to build a web with golang项目地址https://gitcode.com/gh_mirrors/bu/build-web-application-with-golang点击查看免费下载相关推荐用 Go 从零构建 Web 框架beego 项目规划与 MVC 架构设计build-web-application-with-golang 第 13.1 节用 Go 从零构建 Web 框架beego 项目规划与 MVC 架构设计build web application with golang 第 13.1 节文档教程Go Blog 项目规划基于 MVC 设计 Web 框架与博客系统Build Web Application with Golang 第 13.1 节Go Blog 项目规划基于 MVC 设计 Web 框架与博客系统Build Web Application with Golang 第 13.1 节 本文档教程用 Go 从零搭建 Web 框架一博客系统 beelog 的项目规划与设计——build-web-application-with-golang 第 13.1 节详解用 Go 从零搭建 Web 框架一博客系统 beelog 的项目规划与设计——build web application with golang 第 13文档教程上一篇抖音直播录制神器DouyinLiveRecorder的7个稳定性优化技巧下一篇5个维度深度解析如何构建高可用多平台直播录制系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表