亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解析具有格式化字符串變量的模板?

如何解析具有格式化字符串變量的模板?

Go
呼如林 2022-04-26 15:30:49
我有一個包含兩個字段的結構。Msg 字符串將是 fmt.Sprintf("%s %s"),我需要將模板解析為字符串中的這兩個變量type DataDB struct {    ID  int    Msg string}嘗試在這里解析模板,預期的結果應該是 - 你好賈斯汀,我的名字是 abc    var name = "justin"    var msg = "abc"    justin := DataDB{ID: 1, Msg: fmt.Sprintf("%s %s", name, msg)}    s := []DataDB{justin}    tpl, err := template.New("msgs").Parse(` {{range .}}     Hello {{.name}}, my name is {{.msg}}     {{end}}     `)    if err != nil {        panic(err)    }    tpl.Execute(os.Stdout, s)
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

首先,您的DataDB結構沒有名稱字段,因此您將無法在模板中引用它。


將您的模板更新為以下內容:


type DataDB struct {

    ID  int

    Name string

    Msg string

}

然后在您的聲明中設置一個名稱


justin := DataDB{ID: 1, Name: name, Msg: msg}


現在您可以.Name在模板中引用該字段


tpl, err := template.New("msgs").Parse(`

    {{range .}}

    Hello {{.Name}}, my name is {{.Msg}}

    {{end}}

`)

最后,在模板中引用字段時,需要導出字段,所以它們都應該以大寫字母開頭。請參閱上面我的 DataDB 結構版本。


編輯,你不需要fmt.Sprintf(...)現在。


查看完整回答
反對 回復 2022-04-26
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

看來您的Msg包含Name + " " + Message,因此您需要將其拆分" "。


Go 模板是無邏輯的。但是您可以使用輔助函數來添加邏輯。


例如:


type DataDB struct {

    ID  int

    Msg string

}


func (d *DataDB) Name() string {

    return strings.SplitN(d.Msg, " ", 2)[0]

}


func (d *DataDB) Message() string {

    res := strings.SplitN(d.Msg, " ", 2)

    if len(res) < 2 {

        return ""

    }

    return res[1]

}

并像這樣在模板中使用它們:


{{range .}}

    Hello {{.Name}}, my name is {{.Message}}

{{end}}

工作示例


注意:上面的代碼效率稍低,因為它進行了兩次拆分,因此最好單獨創建一個struct僅用于顯示目的并在渲染模板之前填充它。


查看完整回答
反對 回復 2022-04-26
  • 2 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號