LCML/Структуры
deepcopy
deepcopy - Функция deepcopy создает глубокую копию переданного значения.
Метод
Part: LCML/Структуры
Глубокая копия — это процесс создания нового объекта, который является полной копией исходного объекта, включая все его вложенные структуры. В результате изменения в новом объекте не затрагивают исходный объект.
Отличие глубокой копии от поверхностной
Поверхностная копия (shallow copy) копирует только верхний уровень объекта. Вложенные объекты (например, структуры, срезы или карты) не копируются, а передаются по ссылке.Изменение вложенных объектов в копии изменяет их и в оригинале.
Глубокая копия (deep copy) создает новые экземпляры всех вложенных объектов, рекурсивно копируя их содержимое. Изменение вложенных объектов в копии не влияет на оригинал. Формат
deepcopy value
- value: Объект, который нужно скопировать. Результат
Возвращает глубокую копию объекта.
Пример использования
{{ $skills := slicestringnew }} {{ $skills = slicestringappend “Go” Devops“ }} {{ $dict := dict ”name“ ”Katya“ ”age“ 28 ”skills“ $skills }}
{{ $copy := deepcopy $dict }}
{{ /* Изменим данные в копии */ }} {{ set $copy ”name“ ”Ilya“ }} {{ set $copy ”age“ 20 }} {{ set $copy ”skills“ (slicestringappend ”gui“) }}
{{ /* Вывод оригинала и копии */ }} {{ $dict }} {{ $copy }} >> map[name:Katya age:28 skills:[Go Devops]] >> map[name:Ilya age:20 skills:[Go Devops gui]]
deletekey
deletekey - Удаление ключа из словаря
Метод
Part: LCML/Структуры
Функция deletekey удаляет ключ из словаря.
Формат:
deletekey dictionary key
- dictionary — мапа, из которой требуется удалить ключ.
- key — строка, представляющая ключ, который необходимо удалить. Результат:
Возвращает строку true после успешного удаления указанного ключа из словаря.
Пример использования:
{{ $myMap := dict "key1" "value1" "key2" "value2" "key3" "value3" }}
{{ deletekey $myMap "key2" }}
{{ $myMap }}
> "true"
dict
dict - Мультиплексирование параметров и создание структур данных
Метод
Part: LCML/Структуры
Функция dict позволяет мультиплексировать параметры и создавать структуры данных из последовательности пар ключ-значение.
Формат:
dict key1 value1 key2 value2 ...
- key1, key2,… — строковые ключи, по которым будут храниться передаваемые значения.
- value1, value2,… — значения, соответствующие указанным ключам. Результат:
Функция возвращает объект типа map[string]interface{} , который может быть использован в шаблонах для передачи параметров или создания новых структур данных.
Примеры использования:
{{template "sub-template" dict "Data" . "Values" $.Values}}
Объяснение: “sub-template” — имя подключаемого шаблона. dict “Data”. “Values” $.Values — передаёт параметры: Data — в данном примере текущий контекст (. ), Values — в данном примере структура значений ( $.Values ) из корневого контекста.
{{ $new_structure := dict "param1" "value1" "param2" "value2" }}
Объяснение: Создаётся новая структура данных $new_structure с ключами param1 и param2 и их значениями.
dictstring
dictstring - Создание словаря строк
Метод
Part: LCML/Структуры
Функция dictstring создает словарь ( map[string]string ) из переданных строковых параметров. Каждый первый элемент пары становится ключом, а второй — значением. Она подходит для случаев, когда значения и ключи — строки, и помогает создать четко структурированные карты.
Формат:
dictstring key1 value1 key2 value2 ...
key1, key2,… — строки, которые используются как ключи.
value1, value2,… — строки, которые используются как значения. Результат:
Функция возвращает карту ( map[string]string ), содержащую пары ключ-значение, сформированные из входных параметров.
Обработка ошибок:
Пустой список параметров: Если список входных параметров пуст, возвращается ошибка.
Нечетное количество параметров: Если количество параметров нечетное (например, отсутствует значение для последнего ключа), возвращается ошибка. Пример использования:
{{ $queryparams := dictstring "tpls" $tickets "limit" "100" "filter_src" $p "filter_field" "author" "short" "false" }}
fastjsonforkey
fastjsonforkey - Извлечение значения по ключу из JSON
Метод
Part: LCML/Структуры
Функция fastjsonforkey предназначена для быстрого извлечения значения из JSON-строки по указанному ключу с использованием библиотеки fastjson.
Формат:
fastjsonforkey jsonString key
- jsonString — строка, содержащая JSON-данные. Перед обработкой пробелы в начале и конце строки автоматически удаляются.
- key — ключ, значение которого нужно извлечь из JSON-объекта. Поддерживаются только верхнеуровневые ключи. Результат:
Функция возвращает значение, связанное с указанным ключом в JSON-строке. Если возникают ошибки при парсинге JSON или доступе к ключу, возвращается текстовое описание ошибки.
Пример использования:
{{ $userName := fastjsonforkey $user "name" }}
get
get - Получение значения из структуры
Метод
Part: LCML/Структуры
Функция get позволяет извлечь значение из структуры (карты) по заданному ключу. Если ключ отсутствует, возвращается пустая строка.
Формат:
get struct key
- struct — структура в виде карты map[string]interface{}.
- key — строковое имя ключа, значение которого требуется извлечь. Результат:
Функция возвращает значение, соответствующее указанному ключу в переданной карте. Если ключ отсутствует, возвращается пустая строка ( “” ).
Пример использования:
{{ $res := get $.Value "fisher" }}
>> "Грека"
has
has - Функция has проверяет наличие элемента в массиве или срезе.
Метод
Part: LCML/Структуры
Формат
has needle haystack
needle: Элемент, который нужно найти.
haystack: Массив или срез, в котором производится поиск. Результат
Возвращает true, если элемент найден, иначе false.
Пример использования
{{ $list := list “moon” “sky” “sun” }} {{ $result := has “moon” $list }} {{ $result }} >> true
haskey
haskey - Функция haskey проверяет наличие ключа в мапе.
Метод
Part: LCML/Структуры
Формат
haskey d key
d: Мапа, в которой проверяется наличие ключа.
key: Проверяемый ключ. Результат
Возвращает true, если ключ существует, иначе — false.
Пример использования
{{ $dict := dict “name” “Ivan” }} {{ $exists := haskey $dict “name” }} {{ $exists }} >> true
{{ $notExists := hasKey $dict “age” }} {{ $notExists }} >> false
keys
keys - Функция keys возвращает список всех ключей из одного или нескольких словарей.
Метод
Part: LCML/Структуры
Формат
keys d…
- d…: Список словарей, ключи которых извлекаются. Результат
Возвращает список всех ключей из словарей.
Пример использования
{{ $dict := dict “name” “Ivan” “age” 44 }} {{ $keys := keys $dict }} {{ $keys }} >> [name age]
last
last - Функция last возвращает последний элемент среза.
Метод
Part: LCML/Структуры
Формат
last list
- list: Срез, из которого нужно получить последний элемент. Результат
Возвращает последний элемент среза или nil, если срез пустой. Если переданный аргумент не является массивом или срезом, функция вызывает panic.
Пример использования
{{ $list := list 1 2 3 }} {{ $last := last $list }} {{ $last }} >> 3
merge
merge - Функция merge объединяет несколько словарей, добавляя ключи и значения из всех источников.
Метод
Part: LCML/Структуры
Формат
merge dst src…
dst: Целевой словарь, в который выполняется слияние.
src…: Один или несколько исходных словарей, которые добавляются в целевой словарь. Результат
Возвращает объединенный словарь.
Пример использования
{{ $dict1 := dict “name” “Ivan” }} {{ $dict2 := dict “age” 44 }} {{ $merged := merge $dict1 $dict2 }} {{ $merged }} >> map[name:Ivan age:44]
mergeoverwrite
mergeoverwrite - Функция mergeoverwrite объединяет несколько словарей с перезаписью существующих ключей, если они присутствуют в исходных словарях.
Метод
Part: LCML/Структуры
Формат
mergeoverwrite dst src…
dst: Целевой словарь, в который выполняется слияние.
src…: Один или несколько исходных словарей, которые добавляются в целевой словарь с перезаписью. Результат
Возвращает объединенный словарь.
Пример использования
{{ $dict1 := dict “name” “Katya” “age” 28 }} {{ $dict2 := dict “age” 29 }} {{ $merged := mergeoverwrite $dict1 $dict2 }} {{ $merged }} >> map[name:Katya age:29]
omit
omit - Функция omit создает новый словарь, исключая указанные ключи.
Метод
Part: LCML/Структуры
Формат
omit dict keys…
dict: Исходный словарь.
keys…: Список ключей, которые нужно исключить. Результат
Возвращает новый словарь без указанных ключей.
Пример использования
{{ $dict := dict “name” “Ivan” “age” 44 “city” “Khabarovsk” }} {{ $omitted := omit $dict “age” }} {{ $omitted }} >> map[name:Ivan city:Khabarovsk]
pick
pick - Функция pick создает новый словарь, содержащий только указанные ключи из исходного словаря.
Метод
Part: LCML/Структуры
Формат
pick dict keys…
dict: Исходный словарь.
keys…: Список ключей, которые нужно выбрать. Результат
Возвращает новый словарь с выбранными ключами.
Пример использования
{{ $dict := dict “name” “Ivan” “age” 44 “city” “Khabarovsk” }} {{ $picked := pick $dict “name” “city” }} {{ $picked }} >> map[name:Ivan city:Khabarovsk]
pluck
pluck - Функция pluck извлекает значения по указанному ключу из одного или нескольких словарей.
Метод
Part: LCML/Структуры
Формат
pluck key d…
key: Ключ, по которому извлекаются значения.
d…: Список словарей, из которых извлекаются значения. Результат
Возвращает список значений, соответствующих ключу во всех словарях.
Пример использования
{{ $dict1 := dict “name” “Ivan” “role” “techlead }} {{ $dict2 := dict ”name“ ”Katya“ ”role“ ”developer“ }} {{ $names := pluck ”name“ $dict1 $dict2 }} {{ $names }} >> [Ivan Katya]
prepend
prepend - Функция prepend добавляет элемент в начало среза.
Метод
Part: LCML/Структуры
Формат
prepend list value
list: Срез, в который добавляется элемент.
value: Элемент, который нужно добавить в начало среза. Результат
Возвращает новый срез с добавленным элементом в начале. Если переданный аргумент не является массивом или срезом, функция вызывает panic.
Пример использования
{{ $list := list 0 1 2 }} {{ $newList := prepend $list -1 }} {{ $newList }} >> [-1 0 1 2]
push
push - Функция push добавляет элемент в конец среза.
Метод
Part: LCML/Структуры
Формат
push list value
list: Срез, в который добавляется элемент.
value: Элемент, который нужно добавить в конец среза. Результат
Возвращает новый срез с добавленным элементом. Если переданный аргумент не является массивом или срезом, функция вызывает panic.
Пример использования
{{ $list := list 1 2 3 4 }} {{ $newList := push $list 5 }} {{ $newList }} >> [1 2 3 4 5]
rest
rest - Функция rest возвращает все элементы списка, кроме первого.
Метод
Part: LCML/Структуры
Формат
rest list
- list: Список, из которого нужно получить все элементы, кроме первого. Результат
Возвращает новый список без первого элемента. Если список пустой, возвращает пустой список. При возникновении ошибки функция вызывает panic.
Пример использования
{{ $list := list 10 20 30 }} {{ $rest := rest $list }} {{ $rest }} >> [20 30]
reverse
reverse - Функция reverse возвращает новый список с элементами в обратном порядке.
Метод
Part: LCML/Структуры
Формат
reverse list
- list: Список, который нужно развернуть в обратном порядке. Результат
Возвращает новый список с элементами в обратном порядке.
Пример использования
{{ $list := list 10 20 30 }} {{ $reversed := reverse $list }} {{ $reversed }} >> [30 20 10]
set
set - Задание значения в структуре
Метод
Part: LCML/Структуры
Функция set позволяет добавить новое поле или изменить существующее значение в структуре.
Формат:
set struct key value
- struct — структура данных (мапа или объект), в которую нужно внести изменения.
- key — ключ в структуре (строка), который нужно создать или обновить.
- value — значение, которое будет добавлено или заменено (может быть любого типа). Результат:
Возвращает обновленную структуру, чтобы можно было работать с ней дальше.
Пример использования:
{ $_ := set $.Value "fisher" "Грека" }
setstring
setstring - Добавляет или обновляет значение в мапе со строками
Метод
Part: LCML/Структуры
Функция setstring добавляет или обновляет значение в мапе со строками.
Формат:
setstring map key value
- map — map[string]string, в которую будет добавлена или обновлена пара ключ-значение.
- key — строка-ключ.
- value — строка-значение. Результат:
Возвращает обновлённую мапу map[string]string с новой или изменённой парой ключ-значение.
Пример использования:
{{ $data := dict "name" "Ivan" "role" "TeamLead" }}
{{ $updated := setstring $data "department" "Edtech" }}
{{ $updated }}
>> map[department:Edtech name:Ivan role:TeamLead]