Gin框架

Gin

快速入門

  • go get -u github.com/gin-gonic/gin
package main
import gin "github.com/gin-gonic/gin"func main() {engine := gin.Default()engine.GET("/", func(c *gin.Context) {c.String(200, "Hello Gin")})engine.Run(":8888")
}
  • 熱加載

//進入終端執行
go get github.com/pilu/fresh
//然后運行命令
fresh
//如果不成功 get可能不會加入環境變量 使用一次 go install github.com/pilu/fresh

路由基礎

package mainimport (gin "github.com/gin-gonic/gin"
)type User struct {Name string `json:"name"`Age  int    `json:"age"`
}
func main() {engine := gin.Default()engine.LoadHTMLGlob("templates/*") //配置頁面模板的位置engine.GET("/", func(c *gin.Context) {c.String(200, "Hello Gin")})engine.GET("/ping", func(c *gin.Context) {//json.Marshal();c.String(200, "pong")})engine.GET("json", func(c *gin.Context) {c.JSON(200, map[string]interface{}{"success": true,"data": map[string]interface{}{"arr": []int{10, 20,},},})})engine.GET("/ch", func(c *gin.Context) {c.JSON(200, gin.H{ //H 就是map[string]interface{}"success": true,})})engine.GET("/struct", func(c *gin.Context) {a := &User{Name: "user",Age:  0,}c.JSON(200, a)//c.XML(200, a)//返回xml//c.HTML(200, "index.html", gin.H{}) //渲染這個模板value := c.Query("aid")c.String(200, "aid:%s", value)})engine.Run(":8888")
}
//前端的使用 {.name}

模板渲染

func main() {router := gin.Default()router.LoadHTMLGlob("templates/*")//router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")router.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.tmpl", gin.H{"title": "Main website",})})router.Run(":8080")
}
//多層目錄router.LoadHTMLGlob("templates/**/*")
{{ define "posts/index.html" }} 配置文件<html><h1>{{ .title }}</h1>
</html>
  • 一些模板的語法可以看這邊https://blog.csdn.net/Tyro_java/article/details/136170586 (官網都沒寫無語了)
  • 公共標題 {{ template “public/index.html”}} 可以引入一個公共的模塊
  • 配置靜態文件
func main() {router := gin.Default()router.Static("/assets", "./assets")router.StaticFS("/more_static", http.Dir("my_file_system"))router.StaticFile("/favicon.ico", "./resources/favicon.ico")// 監聽并在 0.0.0.0:8080 上啟動服務router.Run(":8080")
}
  • 獲取參數
func main() {router := gin.Default()router.POST("/post", func(c *gin.Context) {id := c.Query("id")//這個只能獲取post的數據page := c.DefaultQuery("page", "0")name := c.PostForm("name")//這個只能獲得post的數據message := c.PostForm("message")fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)})router.Run(":8080")
}
  • 將參數綁定到結構體
package mainimport ("log""time""github.com/gin-gonic/gin"
)
type Person struct {Name     string    `form:"name"`Address  string    `form:"address"`Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1"`
}
func main() {route := gin.Default()route.GET("/testing", startPage)route.Run(":8085")
}
func startPage(c *gin.Context) {var person Person// 如果是 `GET` 請求,只使用 `Form` 綁定引擎(`query`)。// 如果是 `POST` 請求,首先檢查 `content-type` 是否為 `JSON` 或 `XML`,然后再使用 `Form`(`form-data`)。// 查看更多:https://github.com/gin-gonic/gin/blob/master/binding/binding.go#L88if c.ShouldBind(&person) == nil {log.Println(person.Name)log.Println(person.Address)log.Println(person.Birthday)}c.String(200, "Success")
}
  • 獲取原始數據 c.GetRawData()

路由

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()// 創建一個基礎路由組api := r.Group("/api"){api.GET("/users", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "獲取用戶列表"})})api.POST("/users", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "創建新用戶"})})}r.Run(":8080")
}

中間件

  • 外部中間件
  • 全局中間件
  • 分組中間件
  • 中間件和控制器的數據共享
  • c.set(“user”,“scc”) c.get(“user”)
  • c.copy() 拷貝一個gin.Context

上傳文件

func main() {router := gin.Default()// 為 multipart forms 設置較低的內存限制 (默認是 32 MiB)router.MaxMultipartMemory = 8 << 20  // 8 MiBrouter.POST("/upload", func(c *gin.Context) {// 單文件file, _ := c.FormFile("file")log.Println(file.Filename)dst := "./" + file.Filename// 上傳文件至指定的完整文件路徑c.SaveUploadedFile(file, "./files/" + file.Filename)c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))})router.Run(":8080")
}
  • path.join() 拼接路徑

cookie

import ("fmt""github.com/gin-gonic/gin"
)func main() {router := gin.Default()router.GET("/cookie", func(c *gin.Context) {cookie, err := c.Cookie("gin_cookie")if err != nil {cookie = "NotSet"c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true)}fmt.Printf("Cookie value: %s \n", cookie)})router.Run()
}

session

  • 要去下載三方庫

Gorm

https://gorm.io/zh_CN/

go-ini

https://ini.unknwon.io/docs/intro/getting_started

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80618.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Project】基于spark-App端口懂車帝數據采集與可視化

文章目錄 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服務器初始化config 副本集 shard 服務器初始化shard 副本集 mongos服務器添加shard設置chunk大小 啟動分片為集合 user 創建索引…

brew 安裝openjdk查看其版本

使用brew&#xff08;如果你使用Homebrew安裝&#xff09; 如果你通過Homebrew安裝了OpenJDK&#xff0c;可以使用以下命令來查看安裝的版本,&#xff1a; brew list --versions openjdk8 這將會列出所有通過Homebrew安裝的OpenJDK版本及其版本號。 3. 查看/usr/libexec/ja…

【Linux網絡】構建與優化HTTP請求處理 - HttpRequest從理解到實現

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

Day12(回溯法)——LeetCode51.N皇后39.組合總和

1 前言 今天刷了三道回溯法和一道每日推薦&#xff0c;三道回溯法也迷迷糊糊的&#xff0c;每日推薦把自己繞進去了&#xff0c;雖然是一道之前做過的題的變種。刷的腦子疼。。。今天挑兩道回溯題寫一下吧&#xff0c;其中有一道是之前做過的N皇后&#xff0c;今天在詳細寫一寫…

初階數據結構:二叉搜索樹

目錄 概念 性能 效率分析 二分缺陷 功能 插入 查找 刪除 實現 應用 概念 二叉搜索樹&#xff08;又稱&#xff1a;二叉排序樹&#xff09;&#xff0c;是由一些具有特別性質的二叉樹衍變而來。 只要一棵二叉樹具備以下性質&#xff0c;即可稱作二叉搜索樹。 【1】若…

詳解springcloud gateway工作原理、斷言、filter、uri、id、全局跨域、globalfilter等以及關鍵源碼實現

1.gateway概念 網關就是當前微服務項目的"統一入口"程序中的網關就是當前微服務項目對外界開放的統一入口所有外界的請求都需要先經過網關才能訪問到我們的程序提供了統一入口之后,方便對所有請求進行統一的檢查和管理 2. 網關的主要功能 將所有請求統一經過網關網…

C#中的弱引用使用

弱引用&#xff08;Weak Reference&#xff09;是一種特殊的引用類型&#xff0c;它允許你引用一個對象&#xff0c;但不會阻止該對象被垃圾回收器&#xff08;GC&#xff09;回收。弱引用通常用于需要緩存或跟蹤對象&#xff0c;但又不希望因保留引用而導致內存泄漏的場景。弱…

spring響應式編程系列:異步生產數據

目錄 示例 大致流程 create new MonoCreate subscribe new LambdaMonoSubscriber monoCreate.subscribe accept success onNext 時序圖 類圖 數據發布者 MonoCreate 數據訂閱者 LambdaMonoSubscriber 訂閱的消息體 DefaultMonoSink 本篇文章我們來研究如何將…

MCP Python SDK構建的**SQLite瀏覽器**的完整操作指南

以下是使用MCP Python SDK構建的SQLite瀏覽器的完整操作指南&#xff1a; 一、環境準備 安裝依賴 # 安裝MCP SDK及SQLite支持 pip install mcp sqlite3創建測試數據庫 sqlite3 test.db <<EOF CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT); IN…

【Python爬蟲基礎篇】--3.cookie和session

目錄 1.cookie 1.1.定義 1.2.參數 1.3.分類 2.session 3.使用cookie登錄微博 4.使用session登錄 1.cookie 由于http是一個無狀態的協議&#xff0c;請求與請求之間無法相互傳遞或者記錄一些信息&#xff0c;cookie和session正是為了解決這個問題而產生。 例子&#xff1…

風車郵箱系統詳細使用指南:Windows與Ubuntu雙平臺解析

風車郵箱系統V1.2使用手冊 風車郵箱系統詳細使用指南&#xff1a;Windows與Ubuntu雙平臺解析 前言 在日常網絡活動中&#xff0c;我們經常需要一個臨時郵箱來注冊各類網站或接收驗證碼&#xff0c;但不想使用自己的真實郵箱。「風車無線郵箱系統」作為一款優秀的臨時郵箱工具…

同樣的接口用postman/apifox能跑通,用jmeter跑就報錯500

之前沒用過jmeter,第一次用調試壓測腳本遇到了問題 一樣的接口用postman能跑通&#xff0c;用jmeter跑就報錯500&#xff0c;百度很多文章都說是該接口需要加一個‘內容編碼’改成utf-8,我加了還是不行 后來我就想到apifox好像有隱藏的header&#xff0c;然后開始比較apifox的…

1656打印路徑-Floyd回溯/圖論-鏈表/數據結構

藍橋賬戶中心 1.稅收&#xff1a; “城市的稅收”&#xff1a;所以是中介點的稅收&#xff0c;經過該點后加上 2.路徑&#xff1a; 用數組存儲前驅節點從而串成鏈表 pre[ i ][ j ]代表的是從 i 到 j 的最短路徑上 j 的前驅節點是什么 那么便可以pre[ i ][ j ]k 把k加入pa…

Eigen矩陣操作類 (Map, Block, 視圖類)

1. Map 類&#xff1a;內存映射&#xff08;零拷貝操作&#xff09; 核心功能 將現有的 C/C 數組或緩沖區映射為 Eigen 矩陣/向量&#xff0c;不復制數據&#xff0c;直接操作原內存。 模板參數 cpp Map<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>&…

多系統安裝經驗,移動硬盤,ubuntu grub修改/etc/fstab 移動硬盤需要改成nfts格式才能放steam游戲

總結&#xff1a;我硬盤會自動掛載&#xff0c;直接格式化nfts&#xff0c;steam就能裝里面了 機械硬盤裝系統真的不行&#xff0c;超級慢游戲還跑不了 --------------------------------------------------------------------底下都不用看 筆記本一個系統&#xff0c;移動硬盤…

JFLAP SOFTWARE 編譯原理用(自動機繪圖)

csdn全是蛆蟲&#xff0c;2mb的軟件&#xff0c;都在那里搞收費&#xff0c;我就看不慣&#xff0c;我就放出來&#xff0c;那咋了&#xff01;&#xff01;&#xff01; https://pan.baidu.com/s/1IuEfHScynjCCUF5ScF26KA 通過網盤分享的文件&#xff1a;JFLAP7.1.jar 鏈接: h…

[Windows] Disk Sorter文件分類管理軟件 v16.7.18

[Windows] Disk Sorter文件分類管理 鏈接&#xff1a;https://pan.xunlei.com/s/VOOl0sDntAdHvlMkc7N0ZOD-A1?pwd966n# Disk Sorter是一個功能強大的文件分類管理軟件&#xff0c;允許對本地磁盤、網絡共享、NAS設備和企業存儲系統中的文件進行分類&#xff0c;并且支持生成…

STM32提高篇: 藍牙通訊

STM32提高篇: 藍牙通訊 一.藍牙通訊介紹1.藍牙技術類型 二.藍牙協議棧1.藍牙芯片架構2.BLE低功耗藍牙協議棧框架 三.ESP32-C3中的藍牙功能1.廣播2.掃描3.通訊 四.發送和接收 一.藍牙通訊介紹 藍牙&#xff0c;是一種利用低功率無線電&#xff0c;支持設備短距離通信的無線電技…

6.1.多級緩存架構

目錄 一、多級緩存基礎與核心概念 緩存的定義與價值 ? 緩存的應用場景&#xff08;高并發、低延遲、減輕數據庫壓力&#xff09; ? 多級緩存 vs 單級緩存的優劣對比 多級緩存核心組件 ? 本地緩存&#xff08;Caffeine、Guava Cache&#xff09; ? 分布式緩存&#xff08;…

MySQL的MVCC【學習筆記】

MVCC 事務的隔離級別分為四種&#xff0c;其中Read Committed和Repeatable Read隔離級別&#xff0c;部分實現就是通過MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09; 版本鏈 版本鏈是通過undo日志實現的&#xff0c; 事務每次修改…