狗頭語言(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 插件,效果如下:
更多使用方法可以查看官方文檔
開源地址:
github.com/chai2010/gotlang
更多更優質的資訊,請關注我,你的支持會鼓勵我不斷分享更多更好的優質文章。
閱讀更多 星集 的文章