<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Gin筆記一之項(xiàng)目建立與運(yùn)行

      本文首發(fā)于公眾號(hào):Hunter后端

      原文鏈接:Gin筆記一之項(xiàng)目建立與運(yùn)行

      本篇筆記開始介紹 Golangweb 框架 Gin 的相關(guān)內(nèi)容。

      本系列筆記預(yù)計(jì)通過四到五篇筆記內(nèi)容介紹 Gin 框架的核心內(nèi)容,然后通過一個(gè)簡(jiǎn)單的示例介紹一個(gè) Gin 項(xiàng)目的目錄結(jié)構(gòu),然后介紹如何將一個(gè) Gin 項(xiàng)目使用 Docker 打包部署。

      此外,還將介紹在 Gin 項(xiàng)目里連接使用 RedisMongoMySQL 等操作。

      以下是本篇筆記內(nèi)容:

      1. 模塊安裝
      2. 項(xiàng)目運(yùn)行
      3. 接口返回參數(shù)
      4. 運(yùn)行模式

      1、模塊安裝

      創(chuàng)建一個(gè)文件夾 gin_proj,然后進(jìn)入該文件夾執(zhí)行 go mod init gin_proj 初始化 Go 模塊。

      然后安裝 gin 模塊:

      go get github.com/gin-gonic/gin
      

      2、項(xiàng)目運(yùn)行

      我們?cè)?gin_proj 文件夾下創(chuàng)建一個(gè) main.go 文件,然后定義一個(gè)接口,然后返回?cái)?shù)據(jù)的代碼如下:

      package main
      
      import (
          "net/http"
      
          "github.com/gin-gonic/gin"
      )
      
      func main() {
          r := gin.Default()
          r.GET("/test", func(c *gin.Context) {
              c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"})
          })
          r.Run(":9898")
      }
      

      然后在瀏覽器中或者使用 postman 訪問 http://localhost:9898/test 就可以看到對(duì)應(yīng)的結(jié)果輸出。

      其代碼釋義如下。

      1. gin.Default()

      gin.Default() 返回的類型是 *gin.Engine,我們可以用其定義路由和分組,設(shè)置 HTTP 請(qǐng)求類型,比如這里的 r.GET() 以及后面將要介紹的路由組。

      2. r.GET()

      r.GET() 用于設(shè)置請(qǐng)求的方式,比如這里是 GET 請(qǐng)求,如果是 post 請(qǐng)求可以使用 r.POST()

      GET() 方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是路由,比如這里是 /test,第二個(gè)參數(shù)是個(gè)可變參數(shù),...HandlerFunc,可接收多個(gè) HandlerFunc 類型,此類型是一個(gè)函數(shù),接收 *gin.Context 參數(shù),其定義如下:

      type HandlerFunc func(*Context)
      

      這里的第二個(gè)參數(shù),除了路由的處理函數(shù),我們還可以在其中加上中間件處理。

      在上面的代碼示例中,第二個(gè)參數(shù)用的是匿名函數(shù),我們還可以直接將這個(gè)函數(shù)提出去:

      func TestHandler(c *gin.Context) {
          c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"})
      }
      
      func main() {
          r := gin.Default()
          r.GET("/test", TestHandler)
          r.Run(":9898")
      }
      

      3. r.Run()

      r.Run() 接收運(yùn)行時(shí)使用的端口,這里傳入的是 :9898,表示運(yùn)行在 9898 端口。

      如果不傳入?yún)?shù),默認(rèn)使用 8080 端口。

      Run() 還返回一個(gè) err 參數(shù),表示運(yùn)行時(shí) error

      err := r.Run(":9898")
      if err != nil {
          fmt.Println("gin run in 9898 error:", err)
      }
      

      3、接口返回參數(shù)

      在上面 TestHandler 函數(shù)中,接收的參數(shù)是 *gin.Context,我們可以使用其處理請(qǐng)求流程,獲取請(qǐng)求數(shù)據(jù),處理響應(yīng),上下文數(shù)據(jù)傳遞等,這個(gè)在后面做具體的介紹。

      這里返回的代碼如下:

      c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"})
      

      1. c.JSON()

      c.JSON() 這里返回的是 /test 接口的內(nèi)容,接收兩個(gè)參數(shù),第一個(gè)是狀態(tài)碼,也就是 HTTP 狀態(tài)碼,比如 200、404 這種。

      第二個(gè)參數(shù)的類型是 any,接收任意類型的數(shù)據(jù),我們這里返回的是 gin.H{},這個(gè)在后面再介紹。

      這里的 c.JSON() 是用于向客戶端返回 json 格式的數(shù)據(jù),會(huì)將第二個(gè)參數(shù)序列化后返回。

      除了 c.JSON() 外,我們還可以使用 c.String() 返回純文本,c.HTML() 返回 HTML 頁面,和其他的 c.File() 返回文件等操作。

      2. http.StatusOK

      http.StatusOKnet/http 模塊下表示 HTTP 狀態(tài)碼的常量,其值為 200,在 c.JSON(),我們也可以直接使用 200 作為返回值。

      c.JSON(200, gin.H{"code": 0, "message": "success"})
      

      除了 http.StatusOK,還有其他 2xx,3xx,4xx,5xx 等狀態(tài)碼在該模塊下都有定義,這里就不贅述了。

      3. gin.H{}

      gin.H 類型是一個(gè) map,其定義如下:

      type H map[string]any
      

      除了像上面一個(gè)對(duì)返回的字段挨個(gè)進(jìn)行賦值,我們還可以直接返回一個(gè) struct 類型。

      type TestResponse struct {
          Code    int    `json:"code"`
          Message string `json:"message"`
      }
      
      func TestHandler(c *gin.Context) {
          response := TestResponse{
              Code:    0,
              Message: "success",
          }
          c.JSON(http.StatusOK, response)
      }
      

      4、運(yùn)行模式

      gin 里一共定義了三種模式,分別是 debugreleasetest,其定義如下:

      const (
          // DebugMode indicates gin mode is debug.
          DebugMode = "debug"
          // ReleaseMode indicates gin mode is release.
          ReleaseMode = "release"
          // TestMode indicates gin mode is test.
          TestMode = "test"
      )
      

      系統(tǒng)默認(rèn)運(yùn)行模式是 debug 模式,當(dāng)我們直接運(yùn)行 go run main.go 時(shí),其輸出信息如下:

      [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
      
      [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
       - using env:   export GIN_MODE=release
       - using code:  gin.SetMode(gin.ReleaseMode)
      
      [GIN-debug] GET    /test                     --> main.main.func1 (3 handlers)
      [GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
      Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
      [GIN-debug] Listening and serving HTTP on :9898
      

      會(huì)輸出當(dāng)前的運(yùn)行模式,可以訪問的接口等信息,這里第一行的輸出還介紹了我們使用的 r := gin.Default() 會(huì)默認(rèn)使用 Logger and Recovery 兩個(gè)中間件,這個(gè)后面在介紹 gin.Engine 的再詳細(xì)介紹。

      而如果我們?cè)O(shè)置運(yùn)行模式為 release 模式,控制臺(tái)僅僅會(huì)在訪問接口的時(shí)候輸出一條訪問信息,包括訪問時(shí)間、耗時(shí)、請(qǐng)求方式和訪問的接口名稱:

      [GIN] 2025/08/19 - 00:32:09 | 200 |     140.916μs |             ::1 | GET      "/test"
      

      設(shè)置運(yùn)行模式

      我們可以通過下面的方法獲取和設(shè)置運(yùn)行模式:

      // 獲取運(yùn)行模式
      gin.Mode()
      
      // 設(shè)置運(yùn)行模式
      gin.SetMode(gin.ReleaseMode)
      

      gin 在運(yùn)行時(shí),會(huì)先加載系統(tǒng)環(huán)境變量 GIN_MODE,然后根據(jù)獲取的值將系統(tǒng)設(shè)置為對(duì)應(yīng)的模式。

      所以我們?cè)诓渴鹣到y(tǒng)時(shí),如果是以 Docker 形式部署,可以設(shè)置此變量來設(shè)置對(duì)應(yīng)的運(yùn)行模式。

      declare -x GIN_MODE="release"
      

      也可以在 main.go 中直接設(shè)置:

      gin.SetMode(gin.ReleaseMode)
      

      以上就是本篇筆記全部?jī)?nèi)容,主要介紹了 gin 框架的運(yùn)行方式,并介紹了一個(gè)簡(jiǎn)單示例如何設(shè)置接口并返回,還有 gin 的系統(tǒng)模式設(shè)置,接下來幾篇筆記將詳細(xì)介紹 gin.Engine 與路由的相關(guān)操作,gin.Context 與響應(yīng)處理,中間件等設(shè)置。

      posted @ 2025-10-23 23:20  XHunter  閱讀(137)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 香港日本三级亚洲三级| 最新亚洲av日韩av二区| 最新午夜男女福利片视频| 国内外成人综合免费视频| 精品日韩精品国产另类专区| 日韩中文字幕亚洲精品| 老妇xxxxx性开放| 四虎成人在线观看免费| 色99久久久久高潮综合影院| 欧美成人精品三级在线观看 | 亚洲国产av区一区二| 国产精品一码在线播放| 久久久久无码国产精品不卡| 国产一区精品在线免费看| 亚洲ΑV久久久噜噜噜噜噜| 吉水县| 麻豆精品一区二区视频在线| bt天堂新版中文在线| 清水河县| 精品国产欧美一区二区三区在线| 久久天天躁夜夜躁狠狠820175| bt天堂新版中文在线| 国产精一区二区黑人巨大| 99久久久国产精品免费无卡顿| 全部免费毛片在线播放| 老妇女性较大毛片| 欧美巨大极度另类| 中文字幕人妻精品在线| 久久热精品视频在线视频| 狠狠爱五月丁香亚洲综| 欧美野外伦姧在线观看| 风骚少妇久久精品在线观看| 强奷白丝美女在线观看| 丰满少妇内射一区| 国产精品SM捆绑调教视频| 国产精品熟女一区二区三区 | 日韩在线视频网| 国产精品有码在线观看| 精品偷自拍另类精品在线| 尤物yw193无码点击进入| 一区二区三区四区国产综合|