11.14 狗頭語言(Go Template Language)

狗頭語言(Go Template Language)

狗頭語言(Go Template Language)

狗頭語言是基於Go語言標準庫text/template包定製的圖靈完備的玩具語言。

安裝

$ go get github.com/chai2010/gotlang/got

例子1:輸出命令行參數

創建hello.gotmpl程序,輸出命令行參數:

{{/* 狗頭語 版權 @2019 柴樹杉 */}}}

{{template "main" .}}

{{define "main"}}
\t{{range $i, $v := . }}
\t\t{{println $i $v}}
\t{{end}}
{{end}}

其中"{{}}"中間的是程序的語句,語句支持傳統C語言風格的註釋。然後通過{{template "main" .}}執行名字為"main"的模板,執行的參數是.表示的當前對象。這裡的main模板可以看作是宏或者是函數,template指令會展開對應的宏函數,因此就產生了類似函數調用的效果(不過這個函數沒有返回值)。然後通過range指令執行循環,每次循環打印相關信息。

運行腳本:

$ got hello.gotmpl aa bb cc
0 aa
1 bb
2 cc

執行時第一個參數是程序的路徑,後面的參數是傳遞給狗頭語腳本的命令行參數,也就是之前提到的.表示的當前對象。然後就可以輸出命令行參數了。

例子2:打印斐波那契數列

創建./examples/fib.gotmpl程序,輸出斐波那契數列:

{{/* 狗頭語 版權 @2019 柴樹杉 */}}}

{{template_call "main" .}}

{{define "main"}}
\t{{range $_, $i := (xrange 10) }}
\t\t{{printf "%d: %d\\n" $i (template_call "fib" $i)}}
\t{{end}}
{{end}}}

{{define "fib"}}
\t{{if (le . 0)}}
\t\t{{template_ret 0}}
\t\t{{/*return fib(0)*/}}
\t{{else if (eq . 1)}}
\t\t{{template_ret 1}}
\t\t{{/*return fib(1)*/}}
\t{{else}}
\t\t{{template_ret (add (template_call "fib" (sub . 1)) (template_call "fib" (sub . 2)))}}
\t\t{{/*return fib(n-1) + fib(n-2)*/}}
\t{{end}}
{{end}}

這個例子更為複雜:其中涉及到了通過遞歸函數計算斐波那契數列,然後將數列的前10個值打印出來。

運行腳本:

$ got ./examples/fib.gotmpl
0: 0
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34

語法高亮(VS Code)

安裝 gotemplate-syntax 插件,效果如下:

狗頭語言(Go Template Language)

更多使用方法可以查看官方文檔

開源地址:

github.com/chai2010/gotlang

更多更優質的資訊,請關注我,你的支持會鼓勵我不斷分享更多更好的優質文章。


分享到:


相關文章: