前段时间,有个任务:对一批go文件进行处理,提取go代码里面的GET、POST方法中的url以及调用方法名,比如这样
req.GET("/EditGet/xxx", gin.Uid(), r.getDycn)
需要提取文件中类似这样的语句,这个可以用正则搞定,然后用提取的关键字去匹配模板,生成代码,这里用到了template。首先说说template的语法。
{{}}{{.}}
例如,你的对象是个结构体:
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的其他语法,有兴趣的同学可以自己再找找资料,就不赘述了。