【极客兔兔-Web框架Gee详解】Day0 序言

文章目录

  • 一、Web 开发
    • 1. 什么是Web 开发?
    • 2. 主要组成部分
      • 2.1 前端开发
      • 2.2 后端开发
      • 2.3 全栈开发
      • 2.4 数据库管理
    • 3. Web开发过程
      • 3.1 规划和设计:
      • 3.2 开发和编码:
      • 3.3 测试和优化:
      • 3.4 部署和维护:
    • 4. 总结
  • 二、用标准库`net/http`处理Web请求
    • 1. 动态路由
    • 2. 鉴权和中间件
    • 3. 模板引擎
    • .....
  • 三、Web框架
  • 四、Gee框架


Gee是一个Web框架,当我们决定进行Web开发,实现一个Web应用时,就可以用到,下面各位小可爱,跟着我一步步开始这个项目吧~

一、Web 开发

要学习Web框架,那么首先就需要搞明白,什么是Web 开发呢?

1. 什么是Web 开发?

Web开发就是创建和维护网站的过程。它涉及从设计网站的外观和用户体验,到编写代码实现网站的功能,再到确保网站在互联网上正常运行。

2. 主要组成部分

2.1 前端开发

  • 负责网站的外观和用户交互。
  • 使用HTML、CSS和JavaScript等技术。
  • 确保网站在不同设备和浏览器上看起来都不错。

2.2 后端开发

  • 负责网站的逻辑和数据处理。
  • 使用服务器端语言如Python、Java、Go等。
  • 管理数据库,处理用户请求,确保数据安全。

2.3 全栈开发

  • 同时处理前端和后端的开发工作。
  • 需要掌握多种技术和工具。

2.4 数据库管理

  • 存储和管理网站的数据。
  • 使用数据库系统如MySQL、PostgreSQL、MongoDB等。

3. Web开发过程

3.1 规划和设计:

  • 确定网站的目标和功能。
  • 设计网站的结构和用户界面。

3.2 开发和编码:

  • 编写前端和后端代码。
  • 实现网站的功能和交互。

3.3 测试和优化:

  • 确保网站在不同设备和浏览器上正常运行。
  • 优化网站的性能和安全性。

3.4 部署和维护:

  • 将网站发布到互联网上。
  • 定期更新和维护网站,修复问题。

4. 总结

简单来说,Web开发就是把一个网站从无到有地创建出来,并确保它能在互联网上正常运行和使用。

二、用标准库net/http处理Web请求

Go语言的net/http库是一个强大且灵活的标准库,用于构建HTTP客户端和服务器。它提供了处理HTTP请求和响应的基本功能,使开发者可以轻松地创建Web应用程序和服务。

package mainimport ("fmt""log""net/http"
)
func main() {http.HandleFunc("/", handler) // 注册处理函数http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServe("localhost:8000", nil)) // 启动服务器
}func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path) // 发送响应
}

这个标准库提供了基础的Web功能,即监听端口,映射静态路由,解析HTTP报文。但在一些常见的Web开发需求上,开发者需要手动实现更多的功能:

1. 动态路由

  • 标准库的限制:net/http的路由机制是基于静态路径匹配的,无法直接支持动态路由(如/hello/:name或/hello/*)。
  • 框架的优势:Web框架通常提供强大的路由功能,支持动态路由、路径参数、正则表达式匹配等。

2. 鉴权和中间件

  • 标准库的限制:net/http没有内置的中间件机制,开发者需要在每个处理函数中手动实现鉴权、日志记录等功能。
  • 框架的优势:Web框架通常提供中间件机制,允许开发者在请求处理的不同阶段插入通用逻辑,如鉴权、日志、错误处理等。

3. 模板引擎

  • 标准库的限制:虽然Go的标准库提供了html/template和text/template,但它们的功能相对基础,缺乏一些高级特性。
  • 框架的优势:许多Web框架集成了更强大的模板引擎,提供更简化和灵活的HTML生成机制。

三、Web框架

当我们离开框架,使用基础库时,需要频繁手工处理的地方,就是框架的价值所在。

直白地说,Web框架就像是搭建网站的“工具箱”或“模板”。它提供了一套现成的工具和结构,帮助开发者更快、更轻松地创建网站或Web应用。

举个例子
想象你要建一座房子:

  • 没有框架:你需要从头开始,自己设计图纸,买材料,搭建每一面墙,安装每一个电线和水管。这就像使用net/http标准库,你需要自己处理每一个细节。

  • 有框架:你有一个预制的房屋模板,里面有现成的墙壁、屋顶、管道和电线。你只需要根据自己的需求进行调整和装饰。这就像使用Web框架,框架已经为你处理了很多常见的功能,你只需要专注于实现具体的业务逻辑。

假设你要创建一个简单的博客网站:

  • 没有框架:
    • 你需要自己处理用户请求,解析URL,管理用户会话,处理表单数据,连接数据库,生成HTML页面等。这需要编写大量的代码来处理这些基础功能。
  • 使用Web框架:
    • 框架已经提供了用户认证、路由、模板引擎、数据库连接等功能。你只需要编写少量代码来定义博客的具体功能,比如发布文章、显示文章列表等。

四、Gee框架

不同的框架设计理念和提供的功能有很大的差别。比如 Python 语言的 django和flask,前者大而全,后者小而美。Go语言/golang 也是如此,新框架层出不穷,比如Beego,Gin,Iris等。

Gee框架是用 Go 语言实现一个简单的 Web 框架,参考了Gin,大家可以看到很多Gin的影子。
在这里插入图片描述

参考:https://geektutu.com/post/gee.html
大佬的源代码/数据集已上传到 https://github.com/geektutu/7days-golang

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9008.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

点击文本将内容填入tinymce-vue 富文本编辑器的光标处

富文本编辑器组件 <template><div ref"tinymceBox" class"tinymce-box"><Editor id"myEditor" v-model"contentValue" :init"init" :disabled"disabled" blur"inputBlur" click"o…

3.2cpu

这个转换原理是基于&#xff0c;地址号*大小页内偏移量&#xff0c;通过页表使逻辑号和内存号之间建立起联系&#xff0c;从而实现地址的转换 按字节寻址&#xff0c;意思是说一个地址的大小是一个字节 页表记录的是逻辑块号与实际存储的主存块号之间的映射关系&#xff0c;是…

SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-35/ 话不多说…

小北的字节跳动青训营与LangChain实战课:深入探索输出解析器与Pydantic解析器重构(持续更新中~~~)

前言 最近&#xff0c;字节跳动的青训营再次扬帆起航&#xff0c;作为第二次参与其中的小北&#xff0c;深感荣幸能借此机会为那些尚未了解青训营的友友们带来一些详细介绍。青训营不仅是一个技术学习与成长的摇篮&#xff0c;更是一个连接未来与梦想的桥梁~ 小北的青训营 X M…

Leetcode 两数之和 Ⅱ - 输入有序数组

这段代码实现了在一个非递减排序的数组中找到两个数&#xff0c;使它们的和等于目标值的算法。算法使用了双指针技术&#xff0c;具体思想如下&#xff1a; 算法思想&#xff1a; 初始化指针&#xff1a;定义两个指针 left 和 right&#xff0c;分别指向数组的起始位置和末尾位…

UE5.4 PCG 复制关卡实例

关卡实例&#xff1a;最大层级的管理&#xff0c;方便关卡级别的复制、重载 1.创建关卡实例&#xff0c;右箭生成PCG设置。注意&#xff1a;当关卡实例发生变化&#xff0c;需要重新手动再创建一次PCG设置 2.直接拖放到PCG图&#xff0c;设置如下 说明&#xff1a;PCG设置文…

C++ | Leetcode C++题解之第551题学生出勤记录I

题目&#xff1a; 题解&#xff1a; class Solution { public:bool checkRecord(string s) {int absents 0, lates 0;for (auto &ch : s) {if (ch A) {absents;if (absents > 2) {return false;}}if (ch L) {lates;if (lates > 3) {return false;}} else {lates…

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面&#xff0c;每个页…

设计模式(主要的五种)

1.设计模式&#xff1a; 设计模式就是代码设计经验 2.设计模式的类型&#xff1a; 分为三大类&#xff1a;创建型模式&#xff0c;结构型模式&#xff0c;行为模式 创建型模式&#xff1a; 单例模式&#xff1a;某个类只能有一个实例&#xff0c;提供一个全局的访问点。 工…

【北京迅为】itop-3588开发板摄像头使用手册Android12 双摄方案

本章节对应资料在网盘资料“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资料 \07_Android 系统开发配套资料\08_Android12 摄像头使用配套资料”目录下下载。 2.1 Android12 前摄后摄 网盘中默认的 Android12 源码支持四个摄像头单独打开&#xff0c;本小节我们来修改源码…

Javascript如何实现继承?

#一、是什么 继承&#xff08;inheritance&#xff09;是面向对象软件技术当中的一个概念。 如果一个类别B“继承自”另一个类别A&#xff0c;就把这个B称为“A的子类”&#xff0c;而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的…

测度论原创(三)

Morden Prob 文章目录 Morden ProbWeek3多维扩展和随机向量定理3.1推论&#xff1a;random variable的变换定理3.2 连续函数的可测性定理3.3 可测函数的线性组合关于拓展实数集的延伸定理3.4 可测函数的极限依旧为可测性随机变量的概率律&#xff08;Law of X X X&#xff09;…

Sql面试题二:请查询出用户连续三天登录的所有数据记录

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt 1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 2…

vite中env uat/dev文件项目配置

1&#xff1a;图示 在vscode中显示的是&#xff08;在文件中显示不是文件夹而在vscode中显示是文件夹-- .env 而这个.env也是有内容的&#xff09; 2&#xff1a;.env文件内容 # 标题 VITE_APP_TITLE管理系统# 项目本地运行端口号 VITE_PORT80# open 运行 npm run dev 时自动打…

ssm基于JAVA的网上订餐管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…

向日葵远程桌面Visual Studio白屏

问题描述 今天没带笔记本&#xff0c;想着拿 Ipad 远程写会代码&#xff0c;打开VS发现白屏了&#xff0c;看了看向日葵里面的设置有GPU加速&#xff0c;发现是和VS的GPU加速冲突了 解决方案&#xff08;远程同样可用&#xff09; ALT T 弹出工具菜单O 打开选项菜单A会取消…

Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法

类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数&#xff1a;返回值&#xff1a;示例代码&#xff1a; isnull不会检查空字符串 数据准备 有一组数据信息如下&#xff0c;其中主要将TotalCharges、MonthlyC…

Python+Appium编写脚本

一、环境配置 1、安装JDK&#xff0c;版本1.8以上 2、安装Python&#xff0c;版本3.x以上&#xff0c;用来解释python 3、安装node.js&#xff0c;版本^14.17.0 || ^16.13.0 || >18.0.0&#xff0c;用来安装Appimu Server 4、安装npm&#xff0c;版本>8&#xff0c;用…

WPF MVVM入门系列教程(三、数据绑定)

本文主要介绍WPF的数据绑定&#xff08;Data Binding&#xff09;功能&#xff0c;如果你已经熟悉本文的内容&#xff0c;可以跳过并直接阅读后面的文章。 什么是数据绑定 我们先来看一下MSDN上的说明&#xff1a; 数据绑定是在应用 UI 与其显示的数据之间建立连接的过程。 如…

关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1

这里写自定义目录标题 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1操作步骤 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1 操作步骤 -开机后 按 Ctrl R 进入 RAID卡 配置界面&#xff0c;如下&#xff1a;-下面图片是 服务器中硬盘都已经准备好&#xff0c;并…