前段时间,有个任务:对一批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的其他语法,有兴趣的同学可以自己再找找资料,就不赘述了。