Gin框架系列01:極速上手

来源:https://www.cnblogs.com/pingyeaa/archive/2020/04/06/12643270.html
-Advertisement-
Play Games

Gin是什麼? Gin是Go語言編寫的web框架,具備中間件、崩潰處理、JSON驗證、內置渲染等多種功能。 準備工作 本系列演示所有代碼都在Github中,感興趣的同學可以自行查閱,歡迎大家一起完善。 沒有安裝配置Go語言環境的同學請先自行安裝,這裡不再贅述。首先,我們來創建工作目錄 。 然後用 命 ...


Gin是什麼?

Gin是Go語言編寫的web框架,具備中間件、崩潰處理、JSON驗證、內置渲染等多種功能。

準備工作

本系列演示所有代碼都在Github中,感興趣的同學可以自行查閱,歡迎大家一起完善。

https://github.com/pingyeaa/golang-examples/tree/master/gin

沒有安裝配置Go語言環境的同學請先自行安裝,這裡不再贅述。首先,我們來創建工作目錄gin

mkdir gin && cd gin

然後用go mod命令初始化項目,go mod是Go語言的包管理工具,官方推薦使用,有了它就不再受GOPATH的限制,可以在任何目錄初始化項目。

go mod init gin

接下來安裝gin庫。

go get -u github.com/gin-gonic/gin

創建演示代碼的入口文件main.go,當前項目結構大致如下。

.
├── go.mod
├── go.sum
└── main.go

編寫代碼

工作准備就緒之後,來開始今天的代碼編寫,以經典代碼hello word為例。

實例化一個gin對象

r := gin.Default()

Default方法的主要作用是實例化一個帶有日誌、故障恢復中間件的引擎。

func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

定義請求

定義一個GET請求的路由,參數一是路由地址,也就是在瀏覽器訪問的相對路徑,參數二是一個匿名函數,函數內部用於業務邏輯處理。

r.GET("/hello", func(c *gin.Context) {

})

我們就在函數內調用JSON方法返回數據。JSON的操作非常簡單,參數一是狀態碼,參數二是JSON的內容。

r.GET("/hello", func(c *gin.Context) {
  c.JSON(200, gin.H{
    "msg": "Hello world!",
  })
})

JSON內容可以通過gin提供的H方法來構建,非常方便。

// H is a shortcut for map[string]interface{}
type H map[string]interface{}

運行

Run方法最終會調用內置http庫的ListenAndServe方法來監聽埠,如果不傳參數預設監聽80埠,也可以通過參數來變更地址和埠。

r.Run(":8081")

測試

在瀏覽器訪問localhost:8081,如果看到如下提示即成功。

file

完整代碼

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{
			"msg": "Hello world!",
		})
	})
	r.Run(":8081")
}

Go語言庫代碼示例,歡迎star
https://github.com/pingyeaa/golang-examples

感謝大家的觀看,如果覺得文章對你有所幫助,歡迎關註公眾號「平也」,聚焦Go語言與技術原理。
關註我


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如今,許多人嘗試用電腦創作樂器,普遍方法是隨機生成一段音樂,和現有曲子的相似度進行打分,一個分值範圍內算通過。我也這麼做?不,這樣做效率低下,隨機生成幾千首只有一首通過,計算速度也十分低下(超級電腦不說),篩選出的曲子也不一定好聽。 我用什麼方法呢?今天,我們要瞭解許多令人髮指的樂理,以及計算令人 ...
  • 怎麼關閉swoole進程? Linux 手動關閉 swoole 進程 通常情況下,使用構建的命令就可以關閉對應的服務。可有時候 pid 被刪了後,程式邏輯就關閉不了服務了。這個時候,就得用命令來關。 通常方式 laravel 中 swoole 為例 當 pid 文件刪除或被改後,就 stop 不了了 ...
  • 一、面向對象的概念 1、面向對象實現了軟體工程的三個目標:重用性、靈活性和擴展性 2、使其編程的代碼更簡潔,更易於維護,並且具有更強的可重用性 3、面向對象的特點: 封裝:隱藏對象的屬性和實現細節 繼承:從一個基類得到一個或多個類的機制 多態:根據使用類的上下文來重新定義或改變類的性質或行為 二、類 ...
  • 從v5.4.12開始,Laravel Collections現在包括一個when方法,允許您對項目執行條件操作,而不會中斷鏈。 像所有其他Laravel 集合方法,這一個可以有很多用例,選擇其中一個例子,想到的是能夠基於查詢字元串參數進行過濾。 為了演示這個例子,讓我們假設我們有一個來自Larave ...
  • MySQL 學習筆記 資料庫操作 表的操作 數據操作 字元集編碼 數據類型(列類型) 1. 數值類型 2. 字元串類型 3. 日期時間類型 4. 枚舉和集合 IP存儲 列屬性(列約束) mysql 1. PRIMARY 主鍵 能唯一標識記錄的欄位,可以作為主鍵。 一個表只能有一個主鍵。 主鍵具有唯一 ...
  • 定義 trim 去除字元串里的空白符及其他指定字元 Strip whitespace (or other characters) from the beginning and end of a string 描述 參數 可指定任意字元,使用..可指定一個範圍 預設去除下麵五個字元 " " (ASCI ...
  • 有網友在 Quora 上提問,「你用 Python 寫過最牛逼的程式/腳本是什麼?」。本文摘編了 3 個國外程式員的多個小項目,含代碼。 Manoj Memana Jayakumar, 3000+ 頂 更新:憑藉這些腳本,我找到了工作!可看我在這個帖子中的回覆,《Has anyone got a j ...
  • array_flip 交換數組中的鍵和值,值必須是有效的鍵,即必須是 integer 或 string array_reverse 返回單元順序相反的數組,preserve_keys是否保留鍵名 array_intersect_assoc 帶索引檢查計算數組的交集,返回在array1中,且同時在後面 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...