Добавить новое значение ключа на карту в шаблоне golang - PullRequest
1 голос
/ 12 июля 2019
$ hugo version
Hugo Static Site Generator v0.54.0 darwin/amd64 BuildDate: unknown
$ cat layouts/t/code.html
  ...
  {{- $json := getJSON $path -}}
  {{- if eq $action "edit" -}}
    {{- $json.nestedMap["action"] = "update" -}}
  {{- end -}}
  ...
  <script type="module">
    import App from "/code.js";
    new App({{ $json.nestedMap | jsonify }});
  </script>

$ json.nestedMap - это интерфейс map [string] {}

, но получено сообщение об ошибке: ошибка неверного символа U + 005B ‘[’

Спасибо за любые советы.

1 Ответ

2 голосов
/ 12 июля 2019

Ошибка, которую вы получаете, заключается в том, что символ [ является неожиданным.

Действительно, этот синтаксис не работает внутри шаблонов:

$json.nestedMap["action"]

Вместо этого вы должны использовать такую ​​функцию index, чтобы получить доступ к элементу карты:

index $json.nestedMap "action"

Но, AFAIK, этот синтаксис не позволит вам на самом деле установить ключ, просто получить к нему доступ.

Один из способов изменить карту внутри шаблона - это определить некоторый метод в структуре-обертке, а затем вызвать этот метод из шаблона.

Например:

type mapWrapper struct {
    TheMap map[string]interface{}
}

func (m *mapWrapper) SetMapValue(key, value string) string {
    m.TheMap[key] = value
    return ""
}

Тогда в шаблоне:

{{- .SetMapValue "key2" "value2" }}

Полный рабочий пример на детской площадке:

https://play.golang.org/p/8bT4jjYwuzg

...