最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go web入門Go pongo2模板引擎

 更新時間:2022年05月20日 15:34:30   作者:宇宙之一粟  
這篇文章主要為大家介紹了Go web編程入門Go pongo2模板引擎使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板。

模板引擎是一個庫,旨在將模板與數據結合起來以生成文檔。模板引擎用于生成大量電子郵件、源代碼預處理或生成動態(tài) HTML 頁面。

模板由靜態(tài)數據和動態(tài)區(qū)域組成。動態(tài)區(qū)域稍后被數據替換。渲染函數稍后將模板與數據結合起來。模板引擎用于將模板與數據模型相結合以生成文檔。

pongo2 庫是一個受 Django 模板引擎啟發(fā)的 Go 模板引擎。

下載 pongo2 函數庫

使用如下命令:

go get -u github.com/flosch/pongo2/v4

安裝成功后可以看到如下輸出:

go: downloading github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3
go: downloading github.com/flosch/pongo2/v4 v4.0.2
go: downloading gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b
go: downloading github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e
go: downloading github.com/kr/text v0.1.0
go: added github.com/flosch/pongo2/v4 v4.0.2

pongo2 在模板字符串中使用了各種分隔符:

{% %} - statements

{{ }} - expressions to print to the template output

{# #} - comments which are not included in the template output

# ## - line statements

模板可以從帶有 pongo2.FromString 的字符串、帶有 pongo2.FromFile 的文件或帶有pongo2.FromBytes 的字節(jié)中讀取。

文檔使用 Execute、ExecuteWriter 或 ExecuteBytes 函數呈現(xiàn)。這些函數接受一個上下文,它為模板提供常量、變量、實例或函數。

從字符串中讀取模板

pongo2.FromString 函數從字符串中讀取模板。如下代碼將生成一條簡單的文本消息:

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
func main() {
    tpl, err := pongo2.FromString("Hello {{ name }}~")
    if err != nil {
        log.Fatal(err)
    }
    res, err := tpl.Execute(pongo2.Context{"name": "宇宙之一粟"})
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

要打印的變量放在 {{ }} 括號內。

tpl, err := pongo2.FromString("Hello {{ name }}!")

接著,我們使用 Execute 渲染最終的字符串。在上下文中,我們?yōu)?name 變量傳遞一個值 “宇宙之一粟”:

res, err := tpl.Execute(pongo2.Context{"name": "宇宙之一粟"})

最后,運行該代碼:

$ go run main.go         
Hello 宇宙之一粟~

如下圖:

再來看一個例子,我們可以傳遞兩個文本:

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
func main() {
    tpl, err := pongo2.FromString("{{ name }}是{{ occupation }}")
    if err != nil {
        log.Fatal(err)
    }
    name, occupation := "宇宙之一粟", "程序猿??????"
    ctx := pongo2.Context{"name": name, "occupation": occupation}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

運行該代碼:

$ go run main.go
宇宙之一粟是程序猿??????

從文件中讀取文本

使用 ??pongo2.FromFile?? 函數,我們從文件中讀取模板。

新建一個 test.tpl 模板文件:

{{ name }}是{{ occupation }}

該示例生成一條簡單的消息,同時從文件中讀取模板。寫好 main.go 文件:

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
func main() {
    tpl, err := pongo2.FromFile("test.tpl")
    if err != nil {
        log.Fatal(err)
    }
    name, occupation := "宇宙之一粟", "不掉發(fā)的程序猿"
    ctx := pongo2.Context{"name": name, "occupation": occupation}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

運行該程序:

$ go run main.go
宇宙之一粟是不掉發(fā)的程序猿

Go pongo2 迭代

for 語句用于迭代模板中的數據集合。

新建一個 words.tpl 文件:

{% for word in words -%}
    {{ word }}
{% endfor %}

在模板中,我們使用 for 指令來遍歷 words 數據結構的元素。可以用 - 字符去除空白字符。

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
func main() {
    tpl, err := pongo2.FromFile("words.tpl")
    if err != nil {
        log.Fatal(err)
    }
    words := []string{"只要", "對", "編碼", "保持", "熱愛", "!"}
    ctx := pongo2.Context{"words": words}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

在程序中,我們將一段單詞傳遞給 tempate 引擎。我們得到一個單詞列表作為輸出。

$ go run main.go
只要
對
編碼
保持
熱愛
!

Go pongo2 過濾

可以將過濾器應用于數據以修改它們。在 | 之后應用過濾器特點。

更改 words.tpl 文件

{% for word in words -%}
    {{ word }} has {{ word | length }} characters
{% endfor %}

main 文件:

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
func main() {
    tpl, err := pongo2.FromFile("words.tpl")
    if err != nil {
        log.Fatal(err)
    }
    words := []string{"只要", "對", "編碼", "保持", "熱愛", "!"}
    ctx := pongo2.Context{"words": words}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

在程序中,我們將一段單詞傳遞給模板。我們打印每個單詞及其大小。運行該程序:

只要 has 2 characters
對 has 1 characters
編碼 has 2 characters
保持 has 2 characters
熱愛 has 2 characters
! has 1 characters

Go pongo2 條件

可以使用 if/endif 指令創(chuàng)建條件。

新建一個 todo.tpl 文件:

{% for todo in todos -%}
    {% if todo.Done %}
        {{- todo.Title -}}
    {% endif %}
{% endfor %}

在模板文件中,我們使用 if 指令僅輸出已完成的任務。

我們從一片待辦事項中生成輸出。在輸出中,我們僅包含已完成的任務。

package main
import (
    "fmt"
    "github.com/flosch/pongo2/v4"
    "log"
)
type Todo struct {
    Title string
    Done  bool
}
type Data struct {
    Todos []Todo
}
func main() {
    tpl, err := pongo2.FromFile("todo.tpl")
    if err != nil {
        log.Fatal(err)
    }
    todos := []Todo{
        {Title: "看書一小時", Done: false},
        {Title: "寫代碼五小時", Done: true},
        {Title: "吃飯三餐", Done: true},
        {Title: "不加班", Done: false},
        {Title: "日更寫文章", Done: true},
    }
    ctx := pongo2.Context{"todos": todos}
    res, err := tpl.Execute(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res)
}

運行代碼:

$ go run main.go
寫代碼五小時
吃飯三餐
日更寫文章

總結

這篇文章介紹了第三方模板庫 pongo2,pongo2 是一種類似于 Django 語法的 Go 的模板語言。并介紹了從字符串和文件中兩種方式獲取文本,并介紹了 pongo2 的迭代、過濾和 if 條件的使用,并給出了每個代碼案例,希望能對你有幫助。關于 pongo2 的更多用法請參考官方鏈接,還有更多基于 pongo2 的第三方擴展庫,都值得一看,哪個方便用哪個。

參考鏈接:

https://zetcode.com/golang/pongo2/

https://github.com/flosch/pongo2

以上就是Go語言編程入門Go pongo2模板引擎的詳細內容,更多關于Go pongo2模板引擎的資料請關注腳本之家其它相關文章!

相關文章

  • go slice不同初始化方式性能及數組比較詳解

    go slice不同初始化方式性能及數組比較詳解

    這篇文章主要為大家介紹了go slice不同初始化方式性能及數組比較示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • go語言接口用法實例分析

    go語言接口用法實例分析

    這篇文章主要介紹了go語言接口用法,實例分析了Go語言接口的定義及使用技巧,需要的朋友可以參考下
    2015-03-03
  • go env環(huán)境變量配置的使用

    go env環(huán)境變量配置的使用

    在安裝和使用Go時,必須要正確地配置環(huán)境變量,本文主要介紹了go env環(huán)境變量配置的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 利用Go語言搭建WebSocket服務端方法示例

    利用Go語言搭建WebSocket服務端方法示例

    這篇文章主要給大家介紹了利用Go語言搭建WebSocket服務端方法,文中通過示例代碼介紹的非常詳細,需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Go語言如何獲取goroutine的id

    Go語言如何獲取goroutine的id

    在Go語言中,獲取?goroutine的id并不像其他編程語言那樣容易,但依然有辦法,這篇文章就來和大家聊聊具體實現(xiàn)的方法,感興趣的小伙伴可以了解下
    2024-12-12
  • GO日志打印如何添加goroutineid

    GO日志打印如何添加goroutineid

    今天想給日志添加一個前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問題的排查,做日志跟蹤,下面給大家分享GO日志打印如何添加goroutineid,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Go?數據結構之二叉樹詳情

    Go?數據結構之二叉樹詳情

    這篇文章主要介紹了?Go?數據結構之二叉樹詳情,二叉樹是一種數據結構,在每個節(jié)點下面最多存在兩個其他節(jié)點。即一個節(jié)點要么連接至一個、兩個節(jié)點或不連接其他節(jié)點,下文基于GO語言展開二叉樹結構詳情,需要的朋友可以參考一下
    2022-05-05
  • Golang中反射的常見用法分享

    Golang中反射的常見用法分享

    本篇文章主要為大家詳細介紹一些Go語言中常見的反射用法,涵蓋了常見的數據類型的反射操作。文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-01-01
  • 如何使用工具自動監(jiān)測SSL證書有效期并發(fā)送提醒郵件

    如何使用工具自動監(jiān)測SSL證書有效期并發(fā)送提醒郵件

    本文介紹了如何開發(fā)一個工具,用于每日檢測SSL證書剩余有效天數并通過郵件發(fā)送提醒,工具基于命令行,通過SMTP協(xié)議發(fā)送郵件,需配置SMTP連接信息,本文還提供了配置文件樣例及代碼實現(xiàn),幫助用戶輕松部署和使用該工具
    2024-10-10
  • Go語言使用sort包對任意類型元素的集合進行排序的方法

    Go語言使用sort包對任意類型元素的集合進行排序的方法

    這篇文章主要介紹了Go語言使用sort包對任意類型元素的集合進行排序的方法,實例分析了sort排序所涉及的方法與相關的使用技巧,需要的朋友可以參考下
    2015-02-02

最新評論

谷城县| 伊吾县| 赫章县| 固阳县| 汽车| 盐源县| 商水县| 张家口市| 西畴县| 西峡县| 泸西县| 什邡市| 同德县| 金门县| 成武县| 佛山市| 叶城县| 乌审旗| 青川县| 河源市| 合川市| 镇雄县| 庄浪县| 兰坪| 满城县| 杭锦后旗| 嘉祥县| 抚州市| 繁昌县| 齐河县| 元朗区| 自治县| 宜昌市| 册亨县| 宜宾县| 桃江县| 宿迁市| 科技| 涟水县| 伊金霍洛旗| 通海县|