一、Gin
Go Web--Go Module
????????軟件框架(software framework),通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品。
????????框架就是:偷懶的程序員,寫代碼發現寫過了寫的就是那些玩意,碼農,只是代碼的搬運工,干脆將代碼進行封裝, 之后進行重復使用的過程。
????????使用框架,可以大大的提升開發的效率。
????????其實用GO語言標準庫就可以完成web開發,但是為什么使用框架呢?框架就是一個別人搭建好的舞臺,有很多現成的工具可以提供給你用,你在此基礎上開發效率肯定更高。
Go的Web框架分兩派:
一派是基于標準庫net/http的,比如gin-gonic/gin,labstack/echo,astaxie/beego
一派是基于valyala/fasthttp的,更偏向于性能,比如kataras/ iris , gofiber/fiber
1、Gin框架
Gin框架文檔說明
2、新建Gin項目
Go Web--Go Module
1、下載并安裝 gin:
go get -u github.com/gin-gonic/gin
2、測試代碼
package mainimport ("github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/test", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "test Gin success",})})r.Run()
}
訪問測試http://localhost:8080/test
3、運行原理
package mainimport ("github.com/gin-gonic/gin"
)func Test(c *gin.Context) {c.JSON(200, gin.H{"msg": "test Gin success",})
}func main() {//Default()返回的是一個引擎Engine,它是框架非常重要的數據結構,是框架的入口。//引擎 - 框架核心發送機 - 默認服務器 - 整個web服務都是由它來驅動的//Default()底層調用了New(),相當于New()的升級,New()返回的是一個引擎,//在此基礎上多增加了中間件處理-engine.Use(Logger(), Recovery())r := gin.Default()//r := gin.New()//路由:通過訪問"/test"的GET請求走這一條處理邏輯,走對應的函數中的內容//"/test" : 路由規則 函數:路由函數//路由請求方式:GET、POST、DELETE、PATCH、PUT、OPTIONS、HEAD、Any//函數:可以直接寫匿名函數,還可以在外部定義函數使用//r.GET("/test", func(c *gin.Context) {// c.JSON(200, gin.H{// "msg": "test Gin success",// })//})r.GET("/test", Test)//啟動引擎 ,服務器啟動//Run可以傳入參數:host+port//中間拼接的冒號一定不要忘記//r.Run()r.Run(":9999")//r.Run("192.168.0.171:9999")
}
啟動測試
4、數據交互
4.1、模板文件
1、Engine的LoadHTMLFiles方法:(不推薦)
func (engine *Engine) LoadHTMLFiles(files ...string) {
加載子指定的模板文件
不定長參數,可以傳多個字符串,使用這個方法需要指定所有要使用的html文件路徑
2、Engine的LoadHTMLGlob方法:(推薦)
func (engine *Engine) LoadHTMLGlob(pattern string) {
加載子文件夾下的模板文件
只有一個參數,通配符,如:templates/* ,意思是找當前項目路徑下templates文件夾下所有的html文件
3、渲染HTML模板文件:Context的HTML方法:
func (c *Context) HTML(code int, name string, obj any) {
第一個參數:狀態碼
第二個參數:渲染的文件名
第三個參數:傳入參數,空接口可以接受任意類型
HTTP狀態碼
創建templates文件夾下新建hello01.html和hello02.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>Hello01 World!
</body>
</html>
package mainimport ("github.com/gin-gonic/gin"
)func Test(context *gin.Context) {context.HTML(200, "hello01.html", nil)
}func main() {r := gin.Default()//加載文件//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")r.LoadHTMLGlob("templates/*")r.GET("/test", Test)r.Run()
}
啟動測試
?多級目錄模板指定
1、如果有多級目錄,比如templates下有demo01和demo02兩個目錄,如果要使用里面的html文件,
必須得在Load的時候指定多級才可以,
比如:
r.LoadHTMLGlob("templates/**/*")2、指定html文件,除了第一級的templates路徑不需要指定,后面的路徑都要指定
context.HTML(200, "demo02/hello02.html", nil)
3、在html中define定義目錄
{{define "demo02/hello02.html"}}
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>Demo02 Hello02 World!
</body>
</html>
{{end}}
package mainimport ("github.com/gin-gonic/gin"
)func Test(context *gin.Context) {context.HTML(200, "demo02/hello02.html", nil)
}func main() {r := gin.Default()//加載文件//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")r.LoadHTMLGlob("templates/**/*")r.GET("/test", Test)r.Run()
}
啟動測試
?
?
Golang學習+深入(一)
永遠不要讓無法完全信任的人知道你真正的實力有多少!