成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Go每日一庫(kù)之quicktemplate的使用

Go每日一庫(kù)之quicktemplate的使用

熱門(mén)標(biāo)簽:電腦外呼系統(tǒng)輻射大嗎 揚(yáng)州電銷(xiāo)外呼系統(tǒng)軟件 百度地圖標(biāo)注位置網(wǎng)站 開(kāi)通400電話申請(qǐng)流程 武漢百應(yīng)人工智能電銷(xiāo)機(jī)器人 如何利用高德地圖標(biāo)注家 上海企業(yè)外呼系統(tǒng)排名 400手機(jī)電話免費(fèi)辦理 智能語(yǔ)音電銷(xiāo)的機(jī)器人

簡(jiǎn)介

最近在整理我們項(xiàng)目代碼的時(shí)候,發(fā)現(xiàn)有很多活動(dòng)的代碼在結(jié)構(gòu)和提供的功能上都非常相似。為了方便今后的開(kāi)發(fā),我花了一點(diǎn)時(shí)間編寫(xiě)了一個(gè)生成代碼框架的工具,最大程度地降低重復(fù)勞動(dòng)。代碼本身并不復(fù)雜,且與項(xiàng)目代碼關(guān)聯(lián)性較大,這里就不展開(kāi)介紹了。在這個(gè)過(guò)程中,我發(fā)現(xiàn) Go 標(biāo)準(zhǔn)的模板庫(kù)text/template和html/template使用起來(lái)比較束手束腳,很不方便。我從 GitHub 了解到quicktemplate這個(gè)第三方模板庫(kù),功能強(qiáng)大,語(yǔ)法簡(jiǎn)單,使用方便。今天我們就來(lái)介紹一下quicktemplate。

快速使用

本文代碼使用 Go Modules。

先創(chuàng)建代碼目錄并初始化:

$ mkdir quicktemplate  cd quicktemplate
$ go mod init github.com/darjun/go-daily-lib/quicktemplate

quicktemplate會(huì)將我們編寫(xiě)的模板代碼轉(zhuǎn)換為 Go 語(yǔ)言代碼。因此我們需要安裝quicktemplate包和一個(gè)名為qtc的編譯器:

$ go get -u github.com/valyala/quicktemplate
$ go get -u github.com/valyala/quicktemplate/qtc

首先,我們需要編寫(xiě)quicktemplate格式的模板文件,模板文件默認(rèn)以.qtpl作為擴(kuò)展名。下面我編寫(xiě)了一個(gè)簡(jiǎn)單的模板文件greeting.qtpl:

All text outside function is treated as comments.

{% func Greeting(name string, count int) %}
  {% for i := 0; i  count; i++ %}
    Hello, {%s name %}
  {% endfor %}
{% endfunc %}

模板語(yǔ)法非常簡(jiǎn)單,我們只需要簡(jiǎn)單了解以下 2 點(diǎn):

  • 模板以函數(shù)為單位,函數(shù)可以接受任意類(lèi)型和數(shù)量的參數(shù),這些參數(shù)可以在函數(shù)中使用。所有函數(shù)外的文本都是注釋?zhuān)琿tc編譯時(shí)會(huì)忽視注釋?zhuān)?/li>
  • 函數(shù)內(nèi)的內(nèi)容,除了語(yǔ)法結(jié)構(gòu),其他都會(huì)原樣輸出到渲染后的文本中,包括空格和換行。

將greeting.qtpl保存到templates目錄,然后執(zhí)行qtc命令。該命令會(huì)生成對(duì)應(yīng)的 Go 文件greeting.qtpl.go,包名為templates?,F(xiàn)在,我們就可以使用這個(gè)模板了:

package main

import (
  "fmt"

  "github.com/darjun/go-daily-lib/quicktemplate/get-started/templates"
)

func main() {
  fmt.Println(templates.Greeting("dj", 5))
}

調(diào)用模板函數(shù),傳入?yún)?shù),返回渲染后的文本:

$ go run .
    Hello, dj

    Hello, dj

    Hello, dj

    Hello, dj

    Hello, dj

{%s name %}執(zhí)行文本替換,{% for %}循環(huán)生成重復(fù)文本。輸出中出現(xiàn)多個(gè)空格和換行,這是因?yàn)楹瘮?shù)內(nèi)除了語(yǔ)法結(jié)構(gòu),其他內(nèi)容都會(huì)原樣保留,包括空格和換行。

需要注意的是,由于quicktemplate是將模板轉(zhuǎn)換為 Go 代碼使用的,所以如果模板有修改,必須先執(zhí)行qtc命令重新生成 Go 代碼,否則修改不生效。

語(yǔ)法結(jié)構(gòu)

quicktemplate支持 Go 常見(jiàn)的語(yǔ)法結(jié)構(gòu),if/for/func/import/return。而且寫(xiě)法與直接寫(xiě) Go 代碼沒(méi)太大的區(qū)別,幾乎沒(méi)有學(xué)習(xí)成本。只是在模板中使用這些語(yǔ)法時(shí),需要使用{%和%}包裹起來(lái),而且if和for等需要添加endif/endfor明確表示結(jié)束。

變量

上面我們已經(jīng)看到如何渲染傳入的參數(shù)name,使用{%s name %}。由于name是 string 類(lèi)型,所以在{%后使用s指定類(lèi)型。quicktemplate還支持其他類(lèi)型的值:

  • 整型:{%d int %},{%dl int64 %},{%dul uint64 %};
  • 浮點(diǎn)數(shù):{%f float %}。還可以設(shè)置輸出的精度,使用{%f.precision float %}。例如{%f.2 1.2345 %}輸出1.23;
  • 字節(jié)切片([]byte):{%z bytes %};
  • 字符串:{%q str %}或字節(jié)切片:{%qz bytes %},引號(hào)轉(zhuǎn)義為quot;;
  • 字符串:{%j str %}或字節(jié)切片:{%jz bytes %},沒(méi)有引號(hào);
  • URL 編碼:{%u str %},{%uz bytes %};
  • {%v anything %}:輸出等同于fmt.Sprintf("%v", anything)。

先編寫(xiě)模板:

{% func Types(a int, b float64, c []byte, d string) %}
  int: {%d a %}, float64: {%f.2 b %}, bytes: {%z c %}, string with quotes: {%q d %}, string without quotes: {%j d %}.
{% endfunc %}

然后使用:

func main() {
  fmt.Println(templates.Types(1, 5.75, []byte{'a', 'b', 'c'}, "hello"))
}

運(yùn)行:

$ go run .

  int: 1, float64: 5.75, bytes: abc, string with quotes: quot;helloquot;, string without quotes: hello.

調(diào)用函數(shù)

quicktemplate支持在模板中調(diào)用模板函數(shù)、標(biāo)準(zhǔn)庫(kù)的函數(shù)。由于qtc會(huì)直接生成 Go 代碼,我們甚至還可以在同目錄下編寫(xiě)自己的函數(shù)給模板調(diào)用,模板 A 中也可以調(diào)用模板 B 中定義的函數(shù)。

我們先在templates目錄下編寫(xiě)一個(gè)文件rank.go,定義一個(gè)Rank函數(shù),傳入分?jǐn)?shù),返回評(píng)級(jí):

package templates

func Rank(score int) string {
  if score >= 90 {
    return "A"
  } else if score >= 80 {
    return "B"
  } else if score >= 70 {
    return "C"
  } else if score >= 60 {
    return "D"
  } else {
    return "E"
  }
}

然后我們可以在模板中調(diào)用這個(gè)函數(shù):

{% import "fmt" %}
{% func ScoreList(name2score map[string]int) %}
  {% for name, score := range name2score %}
    {%s fmt.Sprintf("%s: score-%d rank-%s", name, score, Rank(score)) %}
  {% endfor %}
{% endfunc %}

編譯模板:

$ qtc

編寫(xiě)程序:

func main() {
  name2score := make(map[string]int)
  name2score["dj"] = 85
  name2score["lizi"] = 96
  name2score["hjw"] = 52

  fmt.Println(templates.ScoreList(name2score))
}

運(yùn)行程序輸出:

$ go run .

    dj: score-85 rank-B

    lizi: score-96 rank-A

    hjw: score-52 rank-E

由于我們?cè)谀0逯杏玫絝mt包,需要先使用{% import %}將該包導(dǎo)入。

在模板中調(diào)用另一個(gè)模板的函數(shù)也是類(lèi)似的,因?yàn)槟0遄罱K都會(huì)轉(zhuǎn)為 Go 代碼。Go 代碼中有同樣簽名的函數(shù)。

Web

quicktemplate常用來(lái)編寫(xiě) HTML 頁(yè)面的模板:

{% func Index(name string) %}
html>
  head>
    title>Awesome Web/title>
  /head>
  body>
    h1>Hi, {%s name %}
    p>Welcome to the awesome web!!!/p>
  /body>
/html>
{% endfunc %}

下面編寫(xiě)一個(gè)簡(jiǎn)單的 Web 服務(wù)器:

func index(w http.ResponseWriter, r *http.Request) {
  templates.WriteIndex(w, r.FormValue("name"))
}

func main() {
  mux := http.NewServeMux()
  mux.HandleFunc("/", index)

  server := http.Server{
    Handler: mux,
    Addr:    ":8080",
  }

  log.Fatal(server.ListenAndServe())
}

qtc會(huì)生成一個(gè)Write*的方法,它接受一個(gè)io.Writer的參數(shù)。將模板渲染的結(jié)果寫(xiě)入這個(gè)io.Writer中,我們可以直接將http.ResponseWriter作為參數(shù)傳入,非常便捷。

運(yùn)行:

$ qtc
$ go run .

瀏覽器輸入localhost:8080?name=dj查看結(jié)果。

總結(jié)

quicktemplate至少有下面 3 個(gè)優(yōu)勢(shì):

  • 語(yǔ)法與 Go 語(yǔ)言非常類(lèi)似,幾乎沒(méi)有學(xué)習(xí)成本;
  • 會(huì)先轉(zhuǎn)換為 Go,渲染速度非常快,比標(biāo)準(zhǔn)庫(kù)html/template快 20 倍以上;
  • 為了安全考慮,會(huì)執(zhí)行一些編碼,避免受到攻擊。

從我個(gè)人的實(shí)際使用情況來(lái)看,確實(shí)很方便,很實(shí)用。感興趣的還可以去看看qtc生成的 Go 代碼。
大家如果發(fā)現(xiàn)好玩、好用的 Go 語(yǔ)言庫(kù),歡迎到 Go 每日一庫(kù) GitHub 上提交 issue😄

參考

quicktemplate GitHub:https://github.com/valyala/quicktemplate
Go 每日一庫(kù) GitHub:https://github.com/darjun/go-daily-lib

到此這篇關(guān)于Go每日一庫(kù)之quicktemplate的使用的文章就介紹到這了,更多相關(guān)Go quicktemplate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解golang 模板(template)的常用基本語(yǔ)法
  • Go html/template 模板的使用實(shí)例詳解
  • golang模板template自定義函數(shù)用法示例
  • Go語(yǔ)言多值替換的HTML模板實(shí)例分析

標(biāo)簽:江西 嘉峪關(guān) 宜賓 黑龍江 武漢 新余 延邊 張掖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go每日一庫(kù)之quicktemplate的使用》,本文關(guān)鍵詞  每日,一庫(kù),之,quicktemplate,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go每日一庫(kù)之quicktemplate的使用》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Go每日一庫(kù)之quicktemplate的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲另类在线观看| 欧美特黄a级高清免费大片a级| 成人在线短视频| 麻豆精品新av中文字幕| 国产特级毛片| 91精品久久久久久久久久久久久| 成年人av电影| 成年人在线看片| 亚洲第一天堂av| 日本一区二区三区视频视频| 中文字幕 国产| 极品少妇一区二区三区精品视频| 一级做a爱视频| 亚洲伦在线观看| 星空大象在线观看免费播放| 欧美大片黄色| 99久久久久成人国产免费| 先锋影音资源综合在线播放av| 中文字幕一区二区三区四区欧美| 亚洲综合自拍| 免费毛片在线播放免费| 亚洲精品国产美女| 欧美污视频网站| 天堂а√在线中文在线鲁大师| 999国内精品视频在线| 久久久精品国产亚洲| 深爱激情五月婷婷| 国产综合色在线| 青青青国产精品| 91欧洲在线视精品在亚洲| 成人午夜一级二级三级| 亚洲影院理伦片| 顶级嫩模精品视频在线看| 久久久久亚洲av片无码v| 亚洲无人区一区| 天天干天天插天天操| 久久久久亚洲综合| 黄色欧美在线| 一级毛片免费观看| 欧美亚洲国产日本| av漫画在线观看| 亚洲一区二区三区蜜桃| 婷婷综合久久中文字幕蜜桃三电影| 欧美日韩不卡视频| 国产美女在线免费观看| 国产人妻精品一区二区三区| 一级特黄大欧美久久久| 精品视频一区三区九区| 国产麻豆视频在线观看| 日韩在线导航| 91高清在线视频| 久久aⅴ乱码一区二区三区| 成年人看的羞羞网站| 亚洲欧美日韩动漫| 激情欧美日韩一区二区| 国产经典一区| 美女福利视频在线观看| 性色av无码久久一区二区三区| 国产三级电影在线| 欧美午夜电影在线观看| 丰满熟妇人妻中文字幕| 一区二区国产盗摄色噜噜| 国产人妻777人伦精品hd| 精品国产av一区二区三区| 黄色一区二区视频| 在线电影中文字幕| 国产亚洲一区二区手机在线观看| 亚洲一区二区三区免费视频| 国产又粗又猛又爽又黄视频| 五月国产精品| 亚洲欧美日韩三级| 亚洲国产精华液网站w| 在线国产一区| jlzzjlzz亚洲女人18| 久久精品一区中文字幕| 色多多视频在线播放| 九九精品在线播放| 亚洲精品影视在线观看| 麻豆91精品91久久久的内涵| 同性恋视频网站资源| 17c国产在线| 欧美乱熟臀69xxxxxx| 91香蕉视频在线观看| 国产视频在线视频| av成人动漫在线观看| 国产精品爽爽爽爽爽爽在线观看| 日韩在线黄色| 丰满少妇又爽又紧又丰满电影| 天堂а在线中文在线无限看推荐| 日韩欧美一区二| 怡红院一区二区| 久久久国产91| 九色综合国产一区二区三区| 污污网站免费在线观看| 久久av资源| 伊人影院在线播放| 91精品国产黑色紧身裤美女| 天天成人综合网| 91视频 - 88av| 九九综合九九| 美女福利视频网| 日韩欧美午夜| 91精品国产乱码久久久久久久久| youjizz在线视频| 亚洲精品一卡二卡| 久久综合精品一区| 欧美日产国产精品| 91成人短视频在线观看| 久久99久久人婷婷精品综合| 在线精品视频播放| 日韩一二三区不卡| 欧美午夜电影一区| 91看片在线播放| 国产精品综合在线视频| 视频91a欧美| 中文字幕制服诱惑| 亚洲一区二区三区四区五区| heyzo在线欧美播放| 日韩av在线一区二区三区| 神马日本精品| 91精品久久久久久综合五月天| 最近2019好看的中文字幕免费| 麻豆成人免费电影| 亚洲二区三区四区| 亚洲国产一区二区三区在线观看| 日韩久久精品| 国产va在线视频| 7777精品伊人久久久大香线蕉的| 亚洲二区在线播放视频| 久久9999久久免费精品国产| 亚洲国产精品久久| 国内久久婷婷综合| 亚洲第一精品福利| 欧美另类videos黑人极品| 久久久国产精品黄毛片| 顶级网黄在线播放| 中文国产字幕在线观看| 波多野结衣不卡视频| 日韩中文在线中文网三级| 久久久久无码国产精品一区| 亚洲国产资源| 男女精品网站| 精品免费视频一区二区| 亚洲色图丝袜| 制服.丝袜.亚洲.另类.中文| 精品一区二区日本| 欧美精品欧美精品系列c| 欧美日韩亚洲在线观看| 国产一级黄色电影| 亚洲AV无码一区二区三区性| 久久精品视频一| 国产精品igao视频| 欧美网站免费| 国产色婷婷亚洲99精品小说| youjizz.com在线观看| 中文字幕欧美人妻精品一区蜜臀| 午夜视频一区在线观看| 国产黄大片在线观看| 中文字幕永久免费| 野外性xxxxfreexxxxx欧美| www.毛片.com| 先锋影音av男人站| 欧美日本一区二区高清播放视频| 亚洲中文字幕无码中文字| 亚洲国产成人va在线观看天堂| 800av免费在线观看| 中文字幕 自拍偷拍| 韩日精品一区二区| 亚洲成avwww人| 国产日本一区二区| 国产成人无码精品| 亚洲欧美日韩在线播放| 少妇性bbb搡bbb爽爽爽欧美| 色婷婷狠狠五月综合天色拍| 天天揉久久久久亚洲精品| 色琪琪原网站亚洲香蕉| 亚洲东热激情| 成人乱码一区二区三区av| 高清精品在线| 亚洲男人的天堂在线视频| 国产97在线|亚洲| 成人国产激情在线| 国产高清在线观看视频| av日韩在线播放| 蜜臀av一区二区| 精品欧美日韩在线| 日本成人精品视频| 欧美日韩电影一区二区| 国产suv精品一区二区三区| 欧美亚洲国产bt| 久色视频在线| 天天摸天天碰天天添| 日韩免费高清av| 久久欧美肥婆一二区| 日韩精品成人一区二区在线| 亚洲少妇中出一区| 秋霞毛片久久久久久久久| 欧美毛片又粗又长又大| av先锋影音资源站| 免费一级黄色大片| 成人免费毛片播放| 九色成人搞黄网站| 性色av一区二区三区在线观看| 久久久精品视频在线观看| 18禁一区二区三区| 欧美孕妇孕交xxⅹ孕妇交| 一本一道久久a久久精品综合| 国产精品成人免费精品自在线观看| 亚洲综合爱爱久久网| 亚洲欧美日韩久久| 国产欧美日韩成人| 黄色av电影网站| 免费成人av电影| 亚洲码欧美码一区二区三区| 91大神在线资源观看无广告| 欧美大胆a人体大胆做受| 1区1区3区4区产品乱码芒果精品| 久久一日本道色综合| eeuss影院www在线观看免费| 国产免费区一区二区三视频免费| 午夜国产福利在线观看| 天天干在线影院| 国产成人夜间影院在线观看| 中文字幕专区| 日本福利在线| 日韩在线观看电影完整版高清免费| 精品久久香蕉国产线看观看亚洲| 国产爆乳无码一区二区麻豆| 亚洲视频 中文字幕| 国产精品美女视频免费观看软件| 中国人体摄影一区二区三区| 国产精品理论片| 亚洲视频一区| 国产欧美一区二区三区视频在线观看| xxxx视频在线| 中文在线资源观看视频网站免费不卡| 久久久综合亚洲91久久98| 久久久久久久久久久久久久国产| 欧美乱妇40p| 黄色免费在线网站| 制服丝袜综合网| 日韩欧美在线免费观看| 午夜亚洲国产au精品一区二区| 霍思燕三级露全乳照| 久久久精品日韩欧美| 国产精品无码免费播放| 日韩色视频在线观看| 黄色高清视频在线观看| 中文字幕亚洲不卡| 国产98色在线|日韩| 久久免费播放视频| 国产精品探花在线播放| 相泽南亚洲一区二区在线播放| 92久久精品一区二区| 国产裸体永久免费无遮挡| 无码人妻少妇色欲av一区二区| 国产在线制服美女| 福利视频一二区| 精品成人在线| 成人在线app| 亚洲天堂av老司机| 日韩经典一区二区三区| 国产精品色在线观看| 日本熟妇人妻xxxx| 国产精品福利视频一区二区三区| 丁香婷婷成人| 久久精品第九区免费观看| 久久久久久久久久久久久久久久久久久| 欧美在线看片| 天天av天天操| 国产91网红主播在线观看| 欧美精品观看| 国产精品18在线| 91亚洲精华国产精华精华液| 天天插天天干| 国产精品亚洲一区二区三区| 手机在线电影一区| 夜夜未满十八勿进的爽爽影视| eeuss鲁一区二区三区| 亚洲人成网站77777在线观看| 男女免费观看在线爽爽爽视频| 亚洲美女毛片| 热久久这里只有| 欧美国产乱视频| 成人综合婷婷国产精品久久免费| 国产精品国产精品国产专区不卡| 91久久人澡人人添人人爽欧美| 国产精品高潮呻吟久久| 国产精品美女久久久久高潮| 欧美日本另类xxx乱大交| 中文字幕中文字幕中文字幕亚洲无线| 污污的视频网站在线观看| 91好吊色国产欧美日韩在线| 欧美日韩国产影院| 孩xxxx性bbbb欧美| 久久超碰97人人做人人爱| 欧美性生交片4| 少妇一晚三次一区二区三区| 欧美国产精品中文字幕| 欧美一级电影网站| 1024精品一区二区三区| 青青草国产免费一区二区下载| 亚洲精品国产成人影院| 26uuu色噜噜精品一区二区| 国产黄色成人av| 九九热免费在线观看| 欧美成人免费电影| 亚洲自拍偷拍一区二区| 国产亚洲精品va在线观看| 成人黄色小视频在线观看| 一级视频在线免费观看| 黄页网站在线观看免费| 一区精品视频| 久久在线免费视频| 国产精品资源网| 日本麻豆一区二区三区视频| 亚洲成在人线免费| 亚洲电影一区二区三区| 久久人人爽人人爽人人av| 欧美三级免费观看| 在线观看私人影院w| 九色在线视频| 亚洲最大激情网| 日韩美女写真福利在线观看| 日韩成人黄色| 一区二区免费在线观看| 久久免费区一区二区三波多野| 欧美高清视频看片在线观看|