前段時間,有個任務:對一批go文件進行處理,提取go代碼里面的GET、POST方法中的url以及調用方法名,比如這樣
req.GET("/EditGet/xxx", gin.Uid(), r.getDycn)
需要提取文件中類似這樣的語句,這個可以用正則搞定,然后用提取的關鍵字去匹配模板,生成代碼,這里用到了template。首先說說template的語法。
Go語言的模板通過{{}}
來包含需要在渲染時被替換的字段,{{.}}
表示當前的對象。
例如,你的對象是個結構體:
type Person struct { Name string Age int Emails []string Jobs []*Jobs }
那麼你可以寫出這樣的模板文件:
The name is {{.Name}}. The age is {{.Age}}.
這樣就會替換掉結構體的成員。
接下來再看看循環,輸出每個Email。
1 {{range .Emails}} 2 An email is {{.}} 3 {{end}}
嵌套字段需要用{{with ..}}{{end}}輸出
{{with .Jobs}} {{range .}} An employer is {{.Employer}} and the role is {{.Role}} {{end}} {{end}}
最后,來看看條件語句
{{if op exp1 [exp2]}}...{{end}}.
if后面的條件如果是一元的 則只寫一個表達式,二元寫倆。比如:
{{if gt (len .Name) 0}}
可以判斷Name是否為空,這里的len是template定義的函數,gt跟shell語法里的gt一樣,其他函數就不一一列舉了。還有template的其他語法,有興趣的同學可以自己再找找資料,就不贅述了。
以上例子大都取 https://jan.newmarch.name/go/template/chapter-template.html。