初探(忽略go基础)
1.安装go和gin
很奇妙的一个过程,特别是安装gin,很多带佬都整理了教程
2. hello world
这是gin文档开始的示例代码
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
import "github.com/gin-gonic/gin":导入Gin框架的包,以便使用Gin提供的功能。func main():程序入口函数。r := gin.Default():创建一个默认的Gin引擎实例,gin.Default()方法会返回一个带有默认中间件的Gin引擎。Gin引擎是用于处理HTTP请求的核心对象。r.GET("/ping", func(c *gin.Context) { ... }):定义一个HTTP GET路由,当客户端通过GET请求访问"/ping"路径时,将执行匿名函数中的代码。这里要注意哟,一定要加/pingc.JSON(200, gin.H{ "message": "pong", }):在匿名函数中,使用c.JSON()方法返回一个JSON响应。c.JSON()方法的第一个参数是HTTP状态码,这里使用了200表示成功。第二个参数是一个Gin框架中的gin.H类型,它是一个map[string]interface{}类型的简写,用于构建JSON响应的键值对。r.Run():启动Gin服务,监听来自客户端的HTTP请求,并在默认地址"0.0.0.0:8080"上提供服务。()里可以指定端口号
初探gin.Context中一些方法
1. 方法:c.JSON(code int, obj any):用于向客户端发送JSON格式的HTTP响应。
- 源码:
func (c *Context) JSON(code int, obj any) {
c.Render(code, render.JSON{Data: obj})
}
- 解释:
-
code int:这是HTTP响应的状态码,表示请求的处理状态,例如200表示成功,404表示未找到,500表示服务器内部错误等。 -
obj any:这是一个空接口类型,表示要返回的JSON数据。由于是空接口类型,obj可以接受任何类型的值作为JSON数据。 -
c.Render(code, render.JSON{Data: obj}):这是使用Gin框架中的Render方法来实现JSON响应的关键部分。它接收两个参数:HTTP状态码和一个Gin框架中的render.JSON结构体。在这里,将obj作为JSON数据传递给render.JSON{Data: obj}。 -
render.JSON{Data: obj}表示构建一个render.JSON结构体,并将obj赋值给其Data字段,该结构体用于生成JSON响应。
2. 方法:c.string(code int, format string, values ...any):用于向客户端发送字符串格式的HTTP响应。
- 源码:
func (c *Context) String(code int, format string, values ...any) {
c.Render(code, render.String{Format: format, Data: values})
}
- 解释:
-
code int:这是HTTP响应的状态码,表示请求的处理状态。 -
format string:这是一个字符串格式化参数,类似于fmt.Sprintf()的格式化字符串。 -
values ...any:这是一个空接口类型的可变参数,表示要填充到格式化字符串中的值。由于是空接口类型,values可以接受任何类型的参数。也可以不传。 -
c.Render(code, render.String{Format: format, Data: values}):这是使用Gin框架中的Render方法来实现字符串响应的关键部分。它接收两个参数:HTTP状态码和一个Gin框架中的render.String结构体。 -
在这里,将
format作为格式化字符串,values用于替换格式化字符串中的占位符,传递给render.String{Format: format, Data: values}。 -
render.String{Format: format, Data: values}表示构建一个render.String结构体,其中Format字段表示要格式化的字符串,而Data字段表示要填充到格式化字符串中的值,用于生成字符串响应。
- 示例:
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.String(200, "h%vello %s", 6, "world")
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
- 浏览器访问:
3. c.HTML(code int, name string, obj any):于向客户端发送HTML格式的HTTP响应。
源码:
func (c *Context) HTML(code int, name string, obj any) {
instance := c.engine.HTMLRender.Instance(name, obj)
c.Render(code, instance)
}
解释:
-
code int:这是HTTP响应的状态码,表示请求的处理状态. -
name string:这是一个字符串,表示要使用的HTML模板的名称。 -
obj any:这是一个空接口类型,表示要传递给HTML模板的数据。由于是空接口类型,obj可以接受任何类型的数据。 -
c.engine.HTMLRender.Instance(name, obj):这是通过HTMLRender对象实例化一个HTML模板,并将obj作为模板的数据。 -
c.engine.HTMLRender表示Gin框架中的HTML模板渲染器,HTMLRender.Instance()方法用于根据模板名称和数据生成一个模板实例。 -
c.Render(code, instance):这是使用Gin框架中的Render方法来实现HTML响应的关键部分。它接收两个参数:HTTP状态码和HTML模板实例。
示例:
- 后端代码
//后端代码
func main() {
r := gin.Default()
// 预加载指定的HTML文件
r.LoadHTMLFiles("helloworld.html")
// 设置路由用于返回date数据和渲染helloworld.html页面
r.GET("/ping", func(c *gin.Context) {
data := "HelloWorld"
// 使用c.HTML方法渲染helloworld.html页面并传递date数据
c.HTML(200, "helloworld.html", gin.H{
"Date": data,
})
})
r.Run(":8080") // 监听并在0.0.0.0:8080上启动服务
}
- 前端代码
<!DOCTYPE html>
<html>
<head>
<title>HelloWorld HTML Page</title>
</head>
<body>
<h1>{{.Date}}</h1>
</body>
</html>
-
gin.H{}处理请求时构建键值对(Key-Value)形式的数据集合。这个数据集合通常用于传递给Gin框架中的渲染方法,以在HTTP响应中返回数据给前端。 -
{{.Date}}是Go语言模板引擎的语法,用于在模板中插入数据。在Gin框架中,当使用c.HTML()方法渲染HTML页面时,你可以通过将数据传递给模板引擎来动态地在HTML页面中插入数据。 -
在
c.HTML()方法中,第三个参数是一个键值对形式的数据集合,其中键是字符串类型,值可以是任何类型的数据,因为使用了interface{}作为值的类型。在Go语言模板引擎中,你可以通过{{.KeyName}}的语法来引用传递给模板的数据集合中的键对应的值。 -
运行此示例浏览器显示:
到点下班!
本人蒟蒻(有点java基础),希望大佬指点