首頁 >後端開發 >Golang >如何在範圍循環內存取 Go 模板中的非結構體欄位?

如何在範圍循環內存取 Go 模板中的非結構體欄位?

DDD
DDD原創
2024-11-09 01:00:02876瀏覽

How to Access Non-Struct Fields in Go Templates Within Range Loops?

在範圍循環內存取Go 範本中的非結構體欄位

當使用{{ range}} 循環中,如果您嘗試存取不直接屬於結構的字段,則可能會遇到錯誤。例如,考慮以下範例:

type User struct {
    Username string
    Password []byte
    Email string
    ...
}

renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
  "lang":  chi.URLParam(r, "lang"),
  "users": users})

在HTML 範本中,嘗試存取{{ .lang }} 欄位時可能會遇到以下錯誤:

`got template: can't evaluate field X in type Y (X not part of Y but stuck in a {{range}} loop)`

發生此錯誤的原因是{{ .lang }} 欄位不是User 結構的一部分。要解決此問題,您可以使用 $ 變量,該變量引用分配給 {{ 的資料。 }} 在呼叫 {{range}} 循環之後。

{{ range .users }}
  <form action="/{{ $.lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

根據 Go 範本文檔,當 {{range}} 循環開始執行時,$ 變數會自動設定為資料參數傳遞給範本。在本例中,資料參數是包含 lang 鍵的映射。因此,您可以在循環中使用 $ 來存取 lang 值。

如果您需要在巢狀迴圈中存取多個非結構體字段,您也可以使用 with 語句或變數賦值語句來賦值 {{ 。 }} 到不同的變數。

以上是如何在範圍循環內存取 Go 模板中的非結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn