文章首发于:clawhub.club
想实现邮件发送时,选择模板功能,于是找了找资料,最开始使用go的text/template,后来发现和我想要的有点区别,最后发现直接用fmt就好了!!!
但是学了就学了,记录一下。
text/template
传入string
1 2 3 4 5 6 7 8 9 10 11 12
| name := "ClawHub" tmpl, err := template.New("test").Parse("hello, {{.}}") if err != nil { panic(err) } err = tmpl.Execute(os.Stdout, name) if err != nil { panic(err) }
|
传入struct
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| type Peolpe struct { Name string Age uint }
p := Peolpe{"ClawHub", 17} tmp2, err := template.New("test").Parse("我的名字: {{.Name}} ,年龄 {{.Age}}") if err != nil { panic(err) } err = tmp2.Execute(os.Stdout, p) if err != nil { panic(err) }
|
文件模板-ParseFiles
1 2 3 4
| tmp3, err := template.ParseFiles("en.txt") err = tmp3.Execute(os.Stdout, p)
|
文件模板-ParseGlob
1 2 3 4 5 6 7 8
| tmp4, err := template.ParseGlob("*.txt") err = tmp4.ExecuteTemplate(os.Stdout, "en", p) err = tmp4.Execute(os.Stdout, p) if err != nil { panic(err) }
|
fmt
就用普通占位符好了
%v : 相应值的默认格式
应用:
感觉一定有更好的解决方案,只不过我没接触过,所以也没有啥思路,先这样吧,模板只能传入一个值,为不能定义为任意值,如果有大神碰巧知道这,请不吝赐教。
以下是我自己想出来的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package tmpl
import "fmt"
type TemplateMsg struct { Subject, Body string }
var signUp = map[string]string{ "subject": "欢迎注册《旅行记账》APP", "word": "您的验证码是:%v,请于5分钟内使用。(若非本人操作,请忽略)", }
var reset = map[string]string{ "subject": "《旅行记账》APP重置密码", "word": "您的验证码是:%v,请于5分钟内使用。(若非本人操作,请忽略)", }
var Templates = make(map[string]map[string]string)
func init() { Templates["signUp"] = signUp Templates["reset"] = reset }
func CheckTemplate(templateId string) bool { _, ok := Templates[templateId] if ok { return true } return false }
func GetTemplateV1(templateId string, word string) TemplateMsg { temp := Templates[templateId] body := fmt.Sprintf(temp["word"], word) return TemplateMsg{temp["subject"], body} }
|