1 gin框架安装
GitHub地址:https://github.com/gin-gonic/gin
-
安装
go get -u github.com/gin-gonic/gin
-
第一个Gin示例:
package main import ( "github.com/gin-gonic/gin" ) func main() { // 创建一个默认的路由引擎 r := gin.Default() // GET:请求方式;/hello:请求的路径 // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 r.GET("/hello", func(c *gin.Context) { // c.JSON:返回JSON格式的数据 c.JSON(200, gin.H{ "message": "Hello world!", }) }) // 启动HTTP服务,默认在0.0.0.0:8080启动服务 r.Run() }
将上面的代码保存并编译执行,然后使用浏览器打开
127.0.0.1:8080/hello
就能看到一串JSON字符串。 -
或者先写好代码,然后在终端中运行
go mod tidy
会自动下载所需依赖,并添加到go.mod中
2 gin hello world
-
第一个Gin示例:
package main import ( "github.com/gin-gonic/gin" ) func main() { // 创建一个默认的路由引擎 router := gin.Default() // GET:请求方式;/hello:请求的路径 // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 router.GET("/hello", func(c *gin.Context) { // c.JSON:返回JSON格式的数据 c.JSON(200, gin.H{ "message": "Hello world!", }) }) // 启动HTTP服务,默认在0.0.0.0:8080启动服务 router.Run() }
将上面的代码保存并编译执行,然后使用浏览器打开127.0.0.1:8080/hello
就能看到一串JSON字符串。
两种启动方式
// 启动方式一
router.Run("0.0.0.0:8080")
// 启动方式二
http.ListenAndServe("0.0.0.0:8080", router)
3 响应
状态码
状态码是在计算机通信和网络协议中使用的一种标识,用于表示请求的处理结果或错误状态。常见的状态码包括HTTP状态码、TCP/IP状态码和操作系统错误码等。
HTTP状态码是在HTTP协议中使用的一种状态指示,用于表示HTTP请求的处理结果。以下是一些常见的HTTP状态码及其含义:
- 200 OK:请求成功,服务器成功处理了请求。
- 201 Created:请求成功并且服务器创建了新的资源。
- 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, "返回txt")
})
返回json
router.GET("/json", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
// 结构体转json
router.GET("/moreJSON", func(c *gin.Context) {
// You also can use a struct
type Msg struct {
Name string `json:"user"`
Message string
Number int
}
msg := Msg{"fengfeng", "hey", 21}
// 注意 msg.Name 变成了 "user" 字段
// 以下方式都会输出 : {"user": "hanru", "Message": "hey", "Number": 123}
c.JSON(http.StatusOK, msg)
})
返回xml
router.GET("/xml", func(c *gin.Context) {
c.XML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK})
})CopyErrorOK!
返回yaml
router.GET("/yaml", func(c *gin.Context) {
c.YAML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK})
})