Day03:Gin框架快速入门01 响应| 青训营

简介: Day03:Gin框架快速入门01 响应| 青训营

导读

本套笔记是为了学习过其他语言框架,想要快速掌握gin框架推行的一套笔记。 虽然为了青训营而制作的一套笔记,但其他想要学go的程序员也可以通过这个上手go世界,后续会带你快速上手gorm,学完这两个之后,简体版抖音基本上就可以独立完成了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。

注意

代码详解大部分是注释的形式给出,请留意代码注释。

Gin框架介绍

导读:Gin是一个非常受欢迎的Golang Web框架,它旨在提供高性能、易用和轻量级的解决方案。

入门小程序

接下来我将用一个简单的程序,带你快速上手一下gin框架。

package main
import (
    "github.com/gin-gonic/gin"//引入框架
    "net/http"
)
func main() {
    router := gin.Default()//设置路由
    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello World")
    })//设置请求路径和响应信息
    router.Run(":8000") //设置运行接口
}

当你把这段代码复制到goland上之后运行,然后打开浏览器输入8000端口,就会显示Hello World这个信息。

image.png

路由

在 Go 中,路由(Routing)是指将收到的 HTTP 请求映射到相应的处理程序或处理函数的过程。路由确定了请求的路径和方法,并将其分发给正确的处理程序来处理该请求。其实就是制造一个获取请求的大门。

GET()

使用get方式获得浏览器的请求,第一个参数设置请求路径,第二参数是一个函数接口,用来设置业务处理。 第二参数也就是自定义函数,所以也可以这样写

String()

第一个参数给浏览器一个ok响应,第二个参数是响应的String字符串。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func a(c *gin.Context) {  
c.String(http.StatusOK, "Hello World")  
}  //命名为a的函数
func main() {  
router := gin.Default() //设置路由  
router.GET("/",a) //设置请求路径和响应信息  
router.Run(":8000") //设置运行接口  
}

run()

打开端口,如果不写的话默认是8080端口,可以自己设置。

状态码

http.StatusOK就是一个状态码,http里面专门封装了各个状态码,知道常用的即可。

-   200 OK:请求成功。服务器成功返回请求的数据。
-   201 Created:请求已经被实现,且在服务器端创建了新的资源。
-   204 No Content:服务器成功处理了请求,但没有返回任何内容。
-   400 Bad Request:客户端发出的请求有错误,服务器无法理解。
-   401 Unauthorized:请求要求身份验证。客户端需要提供有效的身份验证凭据才能访问资源。
-   403 Forbidden:服务器拒绝访问请求的资源。
-   404 Not Found:服务器找不到请求的资源。
-   500 Internal Server Error:服务器内部错误,无法完成请求。

返回字符串

router.GET("/txt", func(c *gin.Context) {
  c.String(http.StatusOK, "看完点赞的你好帅啊")
})

返回字符串是最简单的,不用多讲

返回json

什么是json

SON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有易读性和易于编写的特点。它以键值对的形式组织数据,并使用简洁的文本表示。

JSON 使用类似于 JavaScript 对象字面量的语法:

{
  "name": "Alice",
  "age": 25,
  "isStudent": true,
  "hobbies": ["reading", "painting", "hiking"],
  "address": {
    "street": "123 Main St",
    "city": "Exampleville",
    "country": "ABC"
  }
}

对象(Object):由大括号 {} 包围,其中包含一组键值对。键是字符串,值可以是任意有效的 JSON 数据类型,包括对象、数组、字符串、数字、布尔值和 null。

这也就是我们最熟悉的

快速上手代码

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func a(c *gin.Context) {  
c.JSON(http.StatusOK, gin.H{"Message": "返回成功", "status": "ok"})  
}  //设置json为返回格式,gin.h设置返回信息。格式与json格式一样。
func main() {  
router := gin.Default() //设置路由  
router.GET("/", a) //设置请求路径和响应信息  
router.Run() //设置运行接口  
}

之后运行,我们用postman查看数据,响应成功

image.png

这个是直接响应,然而在真正的业务处理中我们往往是把一个结构体转化成json,这要怎么做呢?

结构体转json返回

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
type Student struct {  
Name string `json:"user"` //名字  
Age int //年龄  
Gender int //性别,1为男,0为女  
} //定义结构体  
func a(c *gin.Context) {  
student := Student{"xiaoming", 18, 1}  
c.JSON(http.StatusOK, student)  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("/json", a) //设置请求路径和响应信息  
router.Run() //设置运行接口  
}

请注意,结构体定义第一个字母必须大写,否则无法正常响应,运行之后使用postman接收

image.png

标签

json:"user"就是标签,标签(Tag)是用来为字段提供附加的元数据,标签可以在运行时通过反射读取,常用于给结构体字段添加说明、配置、验证规则等。标签由一个或多个键值对组成,键和值用冒号分隔,多个键值对之间用空格分隔。

总而言之一个很高级的东西,我们暂时只需要了解 json:"user",后面的慢慢引入学习。

返回xml

XML(可扩展标记语言)是一种用于描述数据的标记语言。它类似于 HTML,但更加通用和灵活,适用于各种应用领域。

XML 使用标签来定义数据的结构和内容。每个 XML 文档都由元素(element)组成,其中包含标签、属性和文本数据。标签由尖括号 <> 包围,例如 <person>。标签可以嵌套,形成层次结构,子元素位于父元素的内部。

这些都是牵扯前端的知识了,我们只需要按照前端的要求返回就行。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func a(c *gin.Context) {  
c.XML(http.StatusOK, gin.H{"user": "xiaoming", "message": "hey", "status": http.StatusOK})  
} //与结构体类似
func main() {  
router := gin.Default() //设置路由  
router.GET("/xml", a) //设置请求路径和响应信息  
router.Run() //设置运行接口  
}

使用postman接受响应

image.png

返回yaml

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式。它旨在成为一种比 XML 和 JSON 等更简洁和易于阅读的数据表示方式。

YAML 使用缩进、换行和特定的标点符号来表示数据结构,与其他格式相比,它更注重可读性和易用性。因此,YAML 文件可以更加直观地呈现复杂的数据结构和层次关系。

person:
  name: John
  age: 30
  gender: male

我们也是按照要求返回即可

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func a(c *gin.Context) {  
c.YAML(http.StatusOK, gin.H{"user": "xiaoming", "message": "hey", "status": http.StatusOK})  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("/yaml", a) //设置请求路径和响应信息  
router.Run() //设置运行接口  
}

使用postman接受响应,如图所示

image.png

文件响应

文件响应(File Response)是指在Web开发中,服务器向客户端返回的一个文件作为响应的内容。当客户端发送请求后,服务器可以将一个文件作为响应内容发送给客户端,客户端可以选择保存、下载或直接展示该文件。

常见的文件响应类型包括但不限于以下几种:

  1. 下载文件:服务器将文件以附件形式返回给客户端,客户端可以选择将文件保存到本地或进行其他操作。
  2. 显示图片:服务器返回一个图片文件,客户端会将其显示在浏览器或其他应用程序中。
  3. 展示文档:服务器返回的文件为文档类型,如 PDF、Word 文档等,客户端可以选择在浏览器中进行展示或下载保存。
  4. 音视频播放:服务器返回的文件为音频或视频文件,客户端可以进行在线播放或下载保存。

在实现文件响应时,服务器通常会设置相应的 MIME 类型(Media Type)来告知客户端所返回的文件类型。这样客户端就能根据对应的 MIME 类型选择合适的方式处理文件。

返回一张照片

在golang中,没有相对文件的路径,它只有相对项目的路径

我们在项目中放一张图片

image.png

我们现在要做的的就是把这一张图片返回回去


package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func main() {  
router := gin.Default() //设置路由  
//第一个参数是静态路径,在这里项目里就是Gin,
//第二个参数是Gin后面的静态路径,你要获得的文件
router.StaticFS("/Gin", http.Dir("/640.jpg"))  
router.Run() //设置运行接口  
}

postman的响应结果如下

image.png

重定向

当客户端访问这个路径之后将会把他自动转到别的路径。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
func main() {  
router := gin.Default() //设置路由  
router.GET("/redirect", func(c *gin.Context) {  
//支持内部和外部的重定向  
c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com/")  
})  
router.Run() //设置运行接口  
}

我们现在浏览器上进入http://localhost:8080/redirect 我们就会来到百度的网站。


相关文章
|
6月前
|
中间件 Go 数据库
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
123 0
|
12天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
26 1
|
6月前
|
存储 关系型数据库 MySQL
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
JSON 缓存 程序员
Day04:Gin框架快速入门02 请求| 青训营
Day04:Gin框架快速入门02 请求| 青训营
|
XML JSON 程序员
Day04:Gin框架快速入门03 bind绑定器| 青训营(一)
Day04:Gin框架快速入门03 bind绑定器| 青训营
|
前端开发
Day04:Gin框架快速入门03 bind绑定器| 青训营(二)
Day04:Gin框架快速入门03 bind绑定器| 青训营
|
前端开发
前端学习笔记202304学习笔记第九天-web前端学习-web开发流程和解析
前端学习笔记202304学习笔记第九天-web前端学习-web开发流程和解析
78 0