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

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

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

      Go Template 常用疑難知識(shí)點(diǎn)

      前段時(shí)間,在項(xiàng)目開(kāi)發(fā)中經(jīng)常和go語(yǔ)言的HTMLL template打交道,特意總結(jié)了幾點(diǎn)我在使用中經(jīng)常遇到不太明確的,比較糾結(jié)疑惑的知識(shí)點(diǎn),鞏固一下,也方便以后查找。

      ? 至于關(guān)于go template的系統(tǒng)性的介紹說(shuō)明,這是一篇我經(jīng)常查看的文章,寫的非常全面。

      1、作用域訪問(wèn)

      ? go template中最常打交道的就是點(diǎn)作用域,點(diǎn)"."代表當(dāng)前作用域的當(dāng)前對(duì)象,因此在通常情況下,”.“指的就是傳給template的Execute方法的數(shù)據(jù)對(duì)象。這里針對(duì)是在在Gin環(huán)境中,數(shù)據(jù)對(duì)象就是傳遞給*gin.Context的HTML方法的第三個(gè)參數(shù)

      dataContext := gin.H{"examID":exam_id, "examName": exam.Name, "questions": qtypeQuestionsMap}
      c.HTML(200, "ffe/exams.tmpl", dataContext)
      

      ? 對(duì)應(yīng)與上面的template執(zhí)行代碼,在模板中的頂級(jí)作用域就是上面的dataContext對(duì)象,那么”{{ .questions}}”獲得的就是dataContext["questions"]

      ? 對(duì)于在range、with方法中,"."相應(yīng)的變?yōu)楫?dāng)前迭代的項(xiàng)目或with的對(duì)象,此時(shí)如果要訪問(wèn)頂級(jí)作用域中的屬性,就要用到"$"這個(gè)一直指向模板級(jí)頂級(jí)作用域的特殊符號(hào)了,注意是模板級(jí)的,在子模板中"$"并不能指向父模板的數(shù)據(jù)對(duì)象(當(dāng)然可以傳遞過(guò)去)

      {{ range $qtype,$qss:=.questions }}
          {{ $ind = inc $ind }}
      		{{/*在range中訪問(wèn)頂級(jí)作用域中的對(duì)象qtypeMap并調(diào)用index方法,同時(shí)聲明了$qts局部變量可以在后續(xù)代碼中使用*/}}
          {{ $qts := index $.qtypeMap $qtype }} 		
      		<div class="qtype" data-qtype="{{$qts.QtypeID}}">{{$qts.QtypeName}}</div>
      {{ end }}
      

      2、方法調(diào)用

      GO template中調(diào)用實(shí)例方法很簡(jiǎn)單,和訪問(wèn)實(shí)例的字段屬性一樣,不要使用call函數(shù),直接dot+方法名就行了,但是這里有幾點(diǎn)要注意:

      1. 方法只能返回一個(gè)值,或者第二個(gè)返回值是Error類型

      2. Template執(zhí)行時(shí),調(diào)用方法的主體區(qū)分是否指針,不會(huì)自動(dòng)裝換,這點(diǎn)需要特別注意

      3. 方法有參數(shù)不需要括號(hào),直接依次空格分割傳遞就行了,例如下面的ItemScore方法需要2個(gè)int參數(shù)

        {{ $qts.ItemScore 2 2}}
        
      4. 方法的連續(xù)調(diào)用,需要用管道符”|“來(lái)鏈接,比如下面的示例,需要調(diào)用”.q“的”QOHtmlTyped“方法,參數(shù)為” false“,然后在調(diào)用自定義模板方法”html“

        {{ .q.QOHtmlTyped false | html }}
        

      3、自定義函數(shù)

      funcMap:=template.FuncMap{
      		"html": func(s string) template.HTML{
      			return template.HTML(s)
      		},
      		"inc": func(n int)int{
      			return n+1
      		},
      		"avg": func(total float64,  count float64)float64{
      			return total/ count
      		},
      		"avgByInt": func(total float64,  count int)float64{
      			return total/ float64(count)
      		},
      		"add": func(n int,an ...int)int{
      			s:=n
      			for _,a:=range an{
      				s += a
      			}
      			return s
      		},
      	}
      

      上面代碼是我自定義的一些常用方法,雖然很簡(jiǎn)單,但是在模板中不能實(shí)現(xiàn),只能通過(guò)自定義函數(shù)來(lái)實(shí)現(xiàn)。

      對(duì)于Gin環(huán)境下,只需要調(diào)用 *gin.Engine的”SetFuncMap“方法就可以了。

      由于我使用了第三方multitemplate庫(kù),需要調(diào)用multitemplate Render的方法

      render := multitemplate.NewRenderer()
      ...
      render.AddFromFilesFuncs(name,funcMap,files...)
      
      posted @ 2024-03-28 11:54  柒零壹  閱讀(109)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精欧美一区二区三区| 精品人妻系列无码天堂| 国产精品久久国产精麻豆99网站| 人妻丰满熟妇无码区免费| 国产精品亚洲国际在线看| 亚洲国产精品综合一区二区| 欧美人成在线播放网站免费| 91精品91久久久久久| 国产极品粉嫩尤物一线天| 91久久久久无码精品露脸| 亚洲午夜无码久久久久蜜臀av | 亚洲av无码成人精品区一区| 99re6这里有精品热视频| 精品亚洲成A人在线观看青青| 中文字幕国产精品av| 久久99日韩国产精品久久99| 国产成人一区二区视频免费| 97se亚洲综合自在线| 久热久热免费在线观视频| 99精产国品一二三产品香蕉| 亚洲高清WWW色好看美女| 午夜色无码大片在线观看免费| 精品久久久久久无码人妻蜜桃| 国产精品高清中文字幕| 青草精品国产福利在线视频| 日韩在线视频网| 天堂а√在线中文在线| 久久综合精品成人一本| 深夜释放自己在线观看| 99精品热在线在线观看视| 色综合久久精品中文字幕| 日韩国产欧美精品在线| 亚洲精品自拍视频在线看| 国产亚洲欧洲av综合一区二区三区| 欧美成人午夜在线观看视频| 亚洲精品一区二区在线播| 免费超爽大片黄| 三级国产在线观看| 欧美丰满熟妇乱XXXXX网站| 么公的好大好硬好深好爽视频| 另类 专区 欧美 制服|