




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
路由路由的分組路由的多種數(shù)據(jù)格式響應(yīng)路由的拆分與注冊(cè)01.03.02.目錄URL重定向04.01路由的分組路由分組定義路由分組使用1路由的分組/login/user1/login/admin/logout/user1/logout/admin將具有一類功能的路由放到一起通常也會(huì)將不同版本的路由分成一個(gè)組路由分組的定義將具有一類功能的路由放到一起通常也會(huì)將不同版本的路由分成一個(gè)組常見應(yīng)用:首頁路由組、用戶路由組、后臺(tái)管理路由組等路由分組的使用/login/username/logout/username1路由的分組homePageRouters:=r.Group("/"){homePageRouters.GET("/",func(c*gin.Context)){c.string(200,"首頁")}homePageRouters.GET("/login",func(c*gin.Context)){c.string(200,"登錄")}homePageRouters.GET("/logout",func(c*gin.Context)){c.string(200,"登出")}homePageRouters.GET("/Commodityclassification",func(c*gin.Context)){c.string(200,"商品分類")}}設(shè)置首頁路由組為/組內(nèi)包含首頁、登錄、登出、商品分類02路由的拆分與注冊(cè)路由的拆分路由的注冊(cè)2路由的拆分與注冊(cè)原目錄結(jié)構(gòu)路由拆分后目錄結(jié)構(gòu)gin_demo├──go.mod├──go.sum├──main.go└──routers.gogin_demo├──go.mod├──go.sum├──main.go└──routers└──routers.go把路由拆分成單獨(dú)的文件或包即:拆分成多個(gè)文件路由的拆分將main.go文件中路由部分的代碼拆分出來,形成單獨(dú)的文件或包。從而避免當(dāng)項(xiàng)目規(guī)模增大后,main.go文件代碼過于龐大路由的拆分的使用路由的注冊(cè)不管拆分的路由還是沒拆分的路由,路由的注冊(cè)方式都是一樣的:需要在文件中注冊(cè)路由,供main.go去調(diào)用。2路由的拆分與注冊(cè)routes/A.gofuncA(r*gin.Engine){ r.GET("/he1",he1Handler) r.GET("/load1",load1Handler) //...}routes/B.gofuncB(r*gin.Engine){ r.GET("/he2",he2Handler) r.GET("/load2",load2Handler) //...}main.go文件funcmain(){ r:=gin.Default() routers.A(r) routers.B(r)…… r.Run();}路由拆分成多個(gè)文件2路由的拆分與注冊(cè)app/blog/router.gofuncRouters(e*gin.Engine){e.GET("/post",postHandler)e.GET("/comment",commentHandler)}app/shop/router.gofuncRouters(e*gin.Engine){e.GET("/goods",goodsHandler)e.GET("/checkout",checkoutHandler)}gin_demo├──app│├──blog││├──handler.go││└──router.go│└──shop│├──handler.go│└──router.go├──go.mod├──go.sum├──main.go└──routers└──routers.go路由拆分到不同的APP2路由的拆分與注冊(cè)main.gofuncmain(){//加載多個(gè)APP的路由配置
routers.Include(shop.Routers,blog.Routers)//初始化路由
r:=routers.Init()iferr:=r.Run();err!=nil{//...}}routes/routes.gotypeOptionfunc(*gin.Engine)varoptions=[]Option{}//注冊(cè)app的路由配置funcInclude(opts...Option){options=append(options,opts...)}//初始化funcInit()*gin.Engine{r:=gin.New()for_,opt:=rangeoptions{opt(r)}returnr}路由拆分到不同的APP03路由的多種數(shù)據(jù)格式響應(yīng)JSON格式XML格式HTML模板渲染3路由的多種數(shù)據(jù)格式響應(yīng)//JSONserializesthegivenstructasJSONintotheresponsebody.//ItalsosetstheContent-Typeas"application/json".func(c*Context)JSON(codeint,objany){ c.Render(code,render.JSON{Data:obj})}JSON渲染gin.H類型//Hisashortcutformap[string]interface{}typeHmap[string]anyRestful風(fēng)格的API所輸出的大多都是JSON格式的內(nèi)容相比較舊的XML格式,JSON格式輕便、簡(jiǎn)潔、易于傳輸使用了gin.H類型來構(gòu)建了一個(gè)鍵值對(duì)對(duì)象3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport( "/gin-gonic/gin")funcmain(){ //創(chuàng)建基礎(chǔ)路由,賦值變量r r:=gin.Default() //使用GET請(qǐng)求
r.GET("/JSON",func(c*gin.Context){ c.JSON(200,gin.H{"name":"Gin","city":"深圳"}) }) //調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}JSON全拼是JavaScriptObjectNotationJSON使用Javascript語法來描述數(shù)據(jù)對(duì)象,但是JSON獨(dú)立于語言和平臺(tái)JSON類似XML,但比XML更小、更快,更易解析、易于人閱讀和編寫3路由的多種數(shù)據(jù)格式響應(yīng)funcmain(){//創(chuàng)建基礎(chǔ)路由,賦值變量rr:=gin.Default()//使用GET請(qǐng)求
r.GET("/JSON",func(c*gin.Context){ c.JSON(200,Person{Name:"Gin",City:"深圳",Age:18}) c.JSON(200,student{stuno:"123",stuname:"Go"})})//調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}packagemainimport( "/gin-gonic/gin")typePersonstruct{ Namestring Citystring Ageint8}typestudentstruct{ stunostring stunamestring}struct轉(zhuǎn)JSON需要注意:結(jié)構(gòu)體類型名、字段名首字母要大寫3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport"/gin-gonic/gin"typePersonstruct{ Namestring`json:"name"` Citystring`json:"city"` Ageint8`json:"age"`}funcmain(){ //創(chuàng)建基礎(chǔ)路由,賦值變量r r:=gin.Default() //使用GET請(qǐng)求
r.GET("/JSON",func(c*gin.Context){ allPerson:=[]Person{{Name:"Gin",City:"深圳",Age:18},{Name:"Go",City:"廣東",Age:20}} c.JSON(200,allPerson) }) //調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}JSON數(shù)組配合jsontag可以實(shí)現(xiàn)自定義名稱3路由的多種數(shù)據(jù)格式響應(yīng)//XMLserializesthegivenstructasXMLintotheresponsebody.//ItalsosetstheContent-Typeas"application/xml".func(c*Context)XML(codeint,objany){ c.Render(code,render.XML{Data:obj})}XML渲染XML//XMLcontainsthegiveninterfaceobject.typeXMLstruct{ Dataany}XML(eXtensibleMarkupLanguage)XML指可擴(kuò)展標(biāo)記語言XML被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù)XML不用于表現(xiàn)和展示數(shù)據(jù)HTML則用來表現(xiàn)數(shù)據(jù)3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport( "/gin-gonic/gin")funcmain(){ //創(chuàng)建基礎(chǔ)路由,賦值變量r r:=gin.Default() //使用GET請(qǐng)求
r.GET("/XML",func(c*gin.Context){ c.XML(200,gin.H{"name":"Gin","city":"深圳"}) }) //調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}XML標(biāo)簽必須成對(duì)出現(xiàn)(即有開始標(biāo)簽——結(jié)束標(biāo)簽)在瀏覽器地址欄的url前加上view-source:前綴可以用來查看頁面源碼3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport"/gin-gonic/gin"typePersonstruct{ Namestring`xml:"name"` Citystring`xml:"city"` Ageint8`xml:"age"`}funcmain(){ //創(chuàng)建基礎(chǔ)路由,賦值變量r r:=gin.Default() //使用GET請(qǐng)求
r.GET("/XML",func(c*gin.Context){ c.XML(200,Person{Name:"Gin",City:"深圳",Age:18}) }) //調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}struct轉(zhuǎn)XMLGin設(shè)計(jì)了字段重命名的功能(即自定義節(jié)點(diǎn)名字),在創(chuàng)建結(jié)構(gòu)體時(shí)給字段添加對(duì)應(yīng)tag即可3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport"/gin-gonic/gin"typePersonstruct{ Namestring`xml:"name"` Citystring`xml:"city"` Ageint8`xml:"age"`}funcmain(){ //創(chuàng)建基礎(chǔ)路由,賦值變量r r:=gin.Default() //使用GET請(qǐng)求
r.GET("/XML",func(c*gin.Context){ allPerson:=[]Person{{Name:"Gin",City:"深圳",Age:18},{Name:"Go",City:"廣東",Age:20}} c.XML(200,gin.H{"Person":allPerson}) }) //調(diào)用Run函數(shù),監(jiān)聽8080端口
r.Run(":8080")}XML數(shù)組XML必須要有一個(gè)根節(jié)點(diǎn)3路由的多種數(shù)據(jù)格式響應(yīng)1.解析HTML文件,創(chuàng)建DOM樹2.解析CSS,形成CSS對(duì)象模型3.將CSS與DOM合并,構(gòu)建渲染樹(renderingtree)4.進(jìn)行布局和繪制HTML網(wǎng)頁渲染過程Go語言內(nèi)置的html/template用于生成可對(duì)抗代碼注入的安全HTML文檔將多個(gè)頁面內(nèi)不變的部分提出來成為模版,而那些可變部分有后端程序提供數(shù)據(jù),借助模版引擎渲染來生成動(dòng)態(tài)網(wǎng)頁模板可以被理解為事先定義好的HTML文檔。模板渲染可以被簡(jiǎn)單理解為文本替換操作——是后端用相應(yīng)的數(shù)據(jù)去替換HTML文檔中事先準(zhǔn)備好的標(biāo)記3路由的多種數(shù)據(jù)格式響應(yīng)index1.html文件<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><title>Document</title></head><body>{{.}}</body></html>template的語法之一:{{.}}這部分是需要通過go的template引擎進(jìn)行解析,然后替換成對(duì)應(yīng)的內(nèi)容3路由的多種數(shù)據(jù)格式響應(yīng)packagemainimport( "html/template" "net/http")functmpl(whttp.ResponseWriter,r*http.Request){ t1,err:=template.ParseFiles("E:/go/demo/index1.html") iferr!=nil{ panic(err) } t1.Execute(w,"Hellohtml/template!")}funcmain(){ http.HandleFunc("/",tmpl) http.ListenAndServe(":8080",nil)}使用template.ParseFiles("test.html"),它會(huì)自動(dòng)創(chuàng)建一個(gè)模板(關(guān)聯(lián)到變量t1上),并解析一個(gè)或多個(gè)文本文件(不僅僅是html文件);解析之后就可以使用Execute(w,"helloworld")去執(zhí)行解析后的模板對(duì)象,執(zhí)行過程是合并、替換的過程。3路由的多種數(shù)據(jù)格式響應(yīng)Gin實(shí)現(xiàn)HTML渲染與Go語言內(nèi)置的html/template類似,先準(zhǔn)備一個(gè)index.html模板文件通過r.LoadHTMLFiles("html/index.html")可以加載這個(gè)模板文件使用c.HTML()函數(shù)調(diào)用packagemainimport( "/gin-gonic/gin" "net/http")funcmain(){ r:=gin.Default() r.LoadHTMLFiles("E:/go/demo/index1.html")//加載模板文件
r.GET("/",func(c*gin.Context){ c.HTML(http.StatusOK,"index1.html","Hello,Gin-HTML模板渲染!")//調(diào)用模板文件
}) r.Run()}3路由的多種數(shù)據(jù)格式響應(yīng)Gin實(shí)現(xiàn)HTML渲染之加載目錄r.LoadHTMLFiles()函數(shù)可以加載多個(gè)模板文件但當(dāng)有大量模板文件的時(shí)候,r.LoadHTMLFiles()函數(shù)就顯得略有不足Gin針對(duì)于此提供了LoadHTMLGlob()函數(shù),該函數(shù)可以高效地加載整個(gè)目錄下的所有模板index2.html文件<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><title>Do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路工程資料承包合同年
- 游戲電競(jìng)產(chǎn)業(yè)電競(jìng)戰(zhàn)隊(duì)管理與賽事組織方案設(shè)計(jì)
- 企業(yè)股權(quán)結(jié)構(gòu)調(diào)整方案
- 高新農(nóng)業(yè)技術(shù)創(chuàng)新發(fā)展合同
- 第2單元 生物體的結(jié)構(gòu)層次 單元導(dǎo)學(xué)(新教學(xué)設(shè)計(jì))2023-2024學(xué)年七年級(jí)上冊(cè)生物(人教版)
- 文心蘭種苗買賣合同8篇
- 藥品質(zhì)量保證協(xié)議新5篇
- 鋁合金門窗砂漿施工方案
- 鎮(zhèn)江住宅暖通工程施工方案
- 2025版農(nóng)副產(chǎn)品定購合同5篇
- 安全隱患舉報(bào)獎(jiǎng)勵(lì)制度
- 牛津書蟲系列1-6級(jí) 雙語 4B-03.金銀島中英對(duì)照
- 瀝青拌合站安裝專項(xiàng)施工方案
- 2024-2025學(xué)年深圳市南山區(qū)六年級(jí)數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 2024-2030年中國免疫細(xì)胞存儲(chǔ)行業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)形勢(shì)與投資戰(zhàn)略研究報(bào)告
- 工貿(mào)行業(yè)企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)實(shí)施指南
- 機(jī)械基礎(chǔ)(少學(xué)時(shí))(第三版) 課件全套 第0-15章 緒論、帶傳動(dòng)-氣壓傳動(dòng)
- T-CACM 1560.6-2023 中醫(yī)養(yǎng)生保健服務(wù)(非醫(yī)療)技術(shù)操作規(guī)范穴位貼敷
- 07J912-1變配電所建筑構(gòu)造
- 糾正冤假錯(cuò)案申訴范文
- 鋰離子電池串并聯(lián)成組優(yōu)化研究
評(píng)論
0/150
提交評(píng)論