golang 使用 text/template 模板生成代码(备忘)

text/template

text/template 是官方自带的模板生成库

使用例子

package main

import (
	"fmt"
	"os"
	"sort"
	"text/template"
)

var tepl1 = `func (m *{{.ModelName}}) HMapKey() string {
	return fmt.Sprintf("{{.TableName}}:{{.EntityDBID}}:%v", m.{{.EntityID}})
}`

var tepl2 = `
func (m *{{.ModelName}}) PK() (pk string){
	fmtStr:="{{.TableName}}
	{{- range $i, $v := .PKFields -}}
		:%v
	{{- end -}}
	"
	return fmt.Sprintf(fmtStr
		{{- range $i, $v := .PKFields -}}
			, m.{{$v}}
		{{- end -}}
		)
}
`

func main() {

	{
		data := map[string]interface{}{
			"ModelName":  "A",
			"TableName":  "t1",
			"EntityDBID": "id",
			"EntityID":   "ID",
		}
		tmpl, _ := template.New("test").Parse(tepl1)
		tmpl.Execute(os.Stdout, data)
		fmt.Println("")
	}

	{
		data := map[string]interface{}{
			"ModelName": "A",
			"TableName": "t1",
			"PKFields":  sort.StringSlice{"ID", "SubID"},
		}
		tmpl, _ := template.New("test").Parse(tepl2)
		tmpl.Execute(os.Stdout, data)
		fmt.Println("")
	}
}

输出:

func (m *A) HMapKey() string {
        return fmt.Sprintf("t1:id:%v", m.ID)
}

func (m *A) PK() (pk string){
        fmtStr:="t1:%v:%v"
        return fmt.Sprintf(fmtStr, m.ID, m.SubID)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值