2016-04-23 35 views
0

我已經有一段字符串(.Table.PKey.Columns),我試圖在我的模板中循環生成一個去附加一些文件,但是當在我的模板I輸出$值,顯然走的是引用它爲我,所以這是給我的錯誤:去模板範圍循環引用我的價值

5:27: expected selector or type assertion, found 'STRING' "ID" 

即代替模板輸出看起來像o.ID - 這是我什麼瞄準,它最終看起來像o."ID"(我假設)。

我在我的假設是正確的,這是使用範圍循環的結果?因爲當我直接在其他地方訪問變量時(例如,說我有一個字符串,而且我做了:o.{{.Table.MyString}}),它似乎正常工作,但只要我嘗試將範圍循環合併到混合中,它似乎引用了一些東西。

{{- range $key, $value := .Table.PKey.Columns }} 
    args = append(args, o.{{$value}}) 
{{ end -}} 

有什麼建議嗎?謝謝。

+1

你爲什麼說你敢開口?你有沒有看過輸出結果(即在把它傳遞給你所引用的錯誤之前)? – djd

+0

你在使用'text/template'或'html/template'嗎? – djd

+0

是的,我已經看到輸出之前,它沒有報價。 我使用短信模板 – b0xxed1n

回答

3

{{range}}不會引用任何內容。如果您在輸出中看到"ID",那麼您的輸入值"ID"包含引號!

見這個例子:

func main() { 
    m := map[string]interface{}{ 
     "Id":  "Id1", 
     "Quoted": `"Id2"`, 
     "Ids": []string{"Id1", `"Id2"`, "Abc"}, 
    } 
    t := template.Must(template.New("").Parse(src)) 
    t.Execute(os.Stdout, m) 
} 

const src = `{{.Id}} {{index .Ids 0}} {{.Quoted}} 
{{range $key, $value := .Ids}}{{$value}} 
{{end}} 
` 

輸出(嘗試在Go Playground):

Id1 Id1 "Id2" 
Id1 
"Id2" 
Abc 
+0

奇怪,我必須在別處做錯事。我會做更多的挖掘。謝謝。 – b0xxed1n