go语言Gin框架的学习路线(一)

我对框架的理解

框架可以被看作是一个"舞台",因为它为开发者提供了一个基础结构,在这个结构上,开发者可以添加自己的代码和逻辑来实现特定的功能。使用框架的好处包括:

  1. 节省时间:框架提供了许多通用的功能和组件,开发者可以避免重复发明轮子,从而节省开发时间。
  2. 提高效率:框架通常遵循最佳实践和设计模式,这有助于提高代码的质量和可维护性。
  3. 促进标准化:框架的使用可以促进团队之间的代码标准化,使得代码更加一致和易于理解。
  4. 简化复杂性:框架可以帮助开发者处理一些底层的复杂性,使他们能够专注于实现业务逻辑。

为什么要学习Gin框架,优势如下

Gin 是一个用 Go (Golang) 编写的 Web 框架,以其性能和易用性而闻名。以下是学习 Gin 框架的一些优势:

  1. 性能:Gin 框架非常注重性能,它是基于标准库 net/http 的一个高性能 Web 框架,能够处理大量的并发请求。

  2. 路由:Gin 提供了一个强大而灵活的路由系统,支持 RESTful 风格路由、参数路由和正则表达式路由,使得路由的配置既简单又强大。

  3. 中间件:Gin 框架支持中间件的使用,允许你在处理请求之前或之后执行一些操作,如日志记录、鉴权、跨域处理等。

  4. 错误处理:Gin 提供了一套优雅的错误处理机制,可以方便地处理和返回错误信息。

  5. JSON 支持:Gin 框架内置了对 JSON 的支持,可以轻松地解析请求体中的 JSON 数据,并返回 JSON 格式的响应。

  6. :Gin 允许你将路由组织成组,这样可以更方便地管理路由和中间件。

  7. 日志记录:Gin 框架内置了日志记录功能,可以方便地记录请求和响应的详细信息。

  8. 社区和文档:Gin 拥有一个活跃的社区和详尽的文档,这为学习和使用 Gin 提供了很好的支持。

  9. 可扩展性:Gin 框架的设计允许开发者根据自己的需求进行扩展,可以很容易地添加自定义的中间件或功能。

  10. 简洁性:Gin 的 API 设计简洁直观,易于学习和使用,即使是初学者也能快速上手。

  11. 测试友好:Gin 框架提供了测试支持,使得编写和执行单元测试变得简单。

  12. 跨平台:作为 Go 语言的一部分,Gin 框架自然支持跨平台开发,可以在多种操作系统上运行。

由于这些优势,Gin 成为了 Go 语言中最受欢迎的 Web 框架之一,特别适合需要高性能和高并发的 Web 应用开发。

我的学习路线

分为3个部分1.Gin框架的基本使用,2.GORM基本使用.3.Web开发项目实战

在这里插入图片描述

在学习Gin框架之前我们先来了解一下Web,有基础可以不用看这个
关于web

在这里插入图片描述

我觉得学习web最重要的是理解下面这张图片

这个图片是什么意思呢?
左边就相当是我们的浏览器或者app右边就是就是你想要访问的服务器
就比如说我们想要访问淘宝的网页那我们就需要在左边输入淘宝的网站地址向淘宝发送请求,淘宝收到请求后会对我们做出响应然后我们就可以进入淘宝的网页信息里面,一个请求对应一个响应,在Wed里面如果我们搞不明白这个,那么我们对web的理解是会比较模糊的
在这里插入图片描述

下面就是一个请求对应一个响应的案例
在这里插入图片描述


下面我们用代码来展示一下:
在这里插入图片描述

其中:9090是我们的端口号(大家要是不懂这里也可以问一下我,或者自己去查一下)

我们输入hello就会跳入sayHello这个函数这里


在这里插入图片描述

因为一直把内容输入在fmt.Fprintln中太不美观了,所以我们将我们想显示单独放在一个文件夹中


在这里插入图片描述

然后将我们./hello.txt这个文件的内容读取出来


在这里插入图片描述


运行的结果为


在这里插入图片描述


REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。
GET用来获取资源
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源。
浏览器默认为GET请求如果我们想要使用POST、PUT、DELETE这三种请求我们可以下载一个Postman来模拟其他三种环境
在这里插入图片描述


默认为GET


在这里插入图片描述

Gin渲染

HTML渲染


Go语言模板引擎的使用可以分为三部分:定义模板文件、解析模板文件和模板渲染.
解析模板文件(注意重点)

上面定义好了模板文件之后,可以使用下面的常用方法去解析模板文件,得到模板对象:
func (t *Template) Parse(src string) (*Template, error)
func ParseFiles(filenames …string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)
**当然,你也可以使用func New(name string) Template函数创建一个名为name的模板,然后对其调用上面的方法去解析模板字符串或模板文件。

模板渲染
渲染模板简单来说就是使用数据去填充模板,当然实际上可能会复杂很多。

func (t *Template) Execute(wr io.Writer, data interface{}) error
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error


 

下面我们用代码来展示一下
1.定义模板
hello.tmpl就是我们的模板文件
在这里插入图片描述

{{.}}的点其实就是字符串替换语句, 这就是模板渲染的最基本的原理

2.解析模板和渲染模板
在这里插入图片描述

模板语法{{.}}

不只是字符串替换还有接口结构体那些
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


还可以同时访问u1和m1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


{{/* a comment */}}
注释,执行时会忽略。可以换行。注释不能嵌套,并且必须紧贴分界符始止

在这里插入图片描述

pipeline
pipeline是指产生数据的操作。比如{{.}}、{{.Name}}等。Go的模板语法中支持使用管道符号|链接多个命令,用法和unix下的管道类似:|前面的命令会将运算结果(或返回值)传递给后一个命令的最后一个位置。
pipeline的概念是传递数据,只要能产生数据的,都是pipeline。

变量
我们还可以在模板中声明变量,用来保存传入模板的数据或其他语句生成的结果。具体语法如下:

$obj := {{.}}

移除空格
有时候我们在使用模板语法的时候会不可避免的引入一下空格或者换行符,这样模板最终渲染出来的内容可能就和我们想的不一样,这个时候可以使用{{-语法去除模板内容左侧的所有空白符号, 使用-}}去除模板内容右侧的所有空白符号。

例如:{{- .Name -}}

注意:-要紧挨{{和}},同时与模板值之间需要使用空格分隔。

条件判断
Go模板语法中的条件判断有以下几种:

{{if pipeline}} T1 {{end}}

{{if pipeline}} T1 {{else}} T0 {{end}}

{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}

下面用代码来展示一下
lt是比较函数
在这里插入图片描述
在这里插入图片描述

range它用于迭代数组、切片、字典等数据结构中的元素
下面我们用代码来展示一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从代码中我们可以知道

{{range $idx, $hobby := .hobby}}:这是一个 range 循环的开始。它会迭代数据对象 .hobby 中的每一个元素。在每次迭代时,

 𝑖𝑑𝑥表示当前元素的索引,idx表示当前元素的索引,hobby 表示当前元素的值。

.hobby 可能是一个数组、切片或者其他可迭代的数据结构。

with语法
var .=.m1 相当于.=.m1下面我们用语法来展示一下
在这里插入图片描述
在这里插入图片描述

index语法{{index .hobby 2}}


{{index .hobby 2}}:这行代码调用了 index 函数,其中 .hobby 是要操作的数据对象,而 2 则是要获取的索引或者键。在这里,.hobby 可能是一个数组、切片或者字典,而 2 则表示我们想要获取的元素的索引或键。

自定义函数
Go的模板支持自定义函数。我们自定义一个kua函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

期末放假自学Gin框架,希望我们可以一起学习!

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们来设计一个简单的购物车项目。首先,我们需要确定项目的功能和需求。 需求: 1. 用户可以注册、登录和注销。 2. 用户可以将商品添加到购物车。 3. 用户可以从购物车中删除商品。 4. 用户可以查看购物车中的商品列表。 5. 用户可以结算购物车中的商品。 接下来,我们可以开始编写代码了。首先,我们需要安装gin框架,可以通过以下命令来安装: ``` go get -u github.com/gin-gonic/gin ``` 接下来,我们可以创建一个main.go文件,并导入gin框架: ```go package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.Run(":8080") } ``` 现在我们可以在浏览器中打开http://localhost:8080/,应该可以看到Gin的欢迎页面。 接下来,我们可以开始编写购物车项目的代码。首先,我们需要创建一个路由来处理用户的注册、登录和注销功能: ```go package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 注册 router.POST("/register", func(c *gin.Context) { // TODO: 处理注册逻辑 }) // 登录 router.POST("/login", func(c *gin.Context) { // TODO: 处理登录逻辑 }) // 注销 router.POST("/logout", func(c *gin.Context) { // TODO: 处理注销逻辑 }) router.Run(":8080") } ``` 接下来,我们需要创建一个商品模型,用于表示商品的信息: ```go type Product struct { ID int `json:"id"` Name string `json:"name"` Price int `json:"price"` } ``` 然后,我们需要创建一个全局的商品列表,用于存储所有的商品信息: ```go var products = []Product{ {ID: 1, Name: "iPhone", Price: 8888}, {ID: 2, Name: "iPad", Price: 5888}, {ID: 3, Name: "MacBook", Price: 12888}, } ``` 现在,我们可以创建一个路由来处理商品的添加和删除功能: ```go // 添加商品到购物车 router.POST("/cart", func(c *gin.Context) { // 获取商品ID id, err := strconv.Atoi(c.PostForm("id")) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product ID"}) return } // 查找商品 var product *Product for i := range products { if products[i].ID == id { product = &products[i] break } } // 商品不存在 if product == nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Product not found"}) return } // TODO: 将商品添加到购物车 c.JSON(http.StatusOK, gin.H{"message": "Product added to cart"}) }) // 从购物车中删除商品 router.DELETE("/cart/:id", func(c *gin.Context) { // 获取商品ID id, err := strconv.Atoi(c.Param("id")) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product ID"}) return } // TODO: 从购物车中删除商品 c.JSON(http.StatusOK, gin.H{"message": "Product removed from cart"}) }) ``` 最后,我们可以创建一个路由来展示购物车中的商品列表,并提供结算功能: ```go // 查看购物车中的商品列表 router.GET("/cart", func(c *gin.Context) { // TODO: 获取购物车中的商品列表 c.JSON(http.StatusOK, gin.H{"cart": "TODO"}) }) // 结算购物车中的商品 router.POST("/checkout", func(c *gin.Context) { // TODO: 处理结算逻辑 c.JSON(http.StatusOK, gin.H{"message": "Checkout successfully"}) }) ``` 至此,我们完成了购物车项目的基本功能。完整代码如下: ```go package main import ( "github.com/gin-gonic/gin" "net/http" "strconv" ) type Product struct { ID int `json:"id"` Name string `json:"name"` Price int `json:"price"` } var products = []Product{ {ID: 1, Name: "iPhone", Price: 8888}, {ID: 2, Name: "iPad", Price: 5888}, {ID: 3, Name: "MacBook", Price: 12888}, } func main() { router := gin.Default() // 注册 router.POST("/register", func(c *gin.Context) { // TODO: 处理注册逻辑 }) // 登录 router.POST("/login", func(c *gin.Context) { // TODO: 处理登录逻辑 }) // 注销 router.POST("/logout", func(c *gin.Context) { // TODO: 处理注销逻辑 }) // 添加商品到购物车 router.POST("/cart", func(c *gin.Context) { // 获取商品ID id, err := strconv.Atoi(c.PostForm("id")) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product ID"}) return } // 查找商品 var product *Product for i := range products { if products[i].ID == id { product = &products[i] break } } // 商品不存在 if product == nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Product not found"}) return } // TODO: 将商品添加到购物车 c.JSON(http.StatusOK, gin.H{"message": "Product added to cart"}) }) // 从购物车中删除商品 router.DELETE("/cart/:id", func(c *gin.Context) { // 获取商品ID id, err := strconv.Atoi(c.Param("id")) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product ID"}) return } // TODO: 从购物车中删除商品 c.JSON(http.StatusOK, gin.H{"message": "Product removed from cart"}) }) // 查看购物车中的商品列表 router.GET("/cart", func(c *gin.Context) { // TODO: 获取购物车中的商品列表 c.JSON(http.StatusOK, gin.H{"cart": "TODO"}) }) // 结算购物车中的商品 router.POST("/checkout", func(c *gin.Context) { // TODO: 处理结算逻辑 c.JSON(http.StatusOK, gin.H{"message": "Checkout successfully"}) }) router.Run(":8080") } ``` 当然,这只是一个简单的示例项目,实际的购物车项目可能涉及到更多的功能和复杂的业务逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值