Первичное выражение (primary expression) формы
а[х]
обозначает элемент массива, указатель на массив, срез (slice), строку или карту (map) a индексированную x. Значение x называется индексом или ключом карты (map key) соответственно. Применяются следующие правила:
Если a это не карта (map):
- индекс x должен иметь целочисленный тип или нетипизированную константу
- константный индекс должен быть неотрицательным и представлен значением типа int
- нетипизированный константный индекс имеет тип int
- индекс x находится в диапазоне, если 0 <= x < len(a), в противном случае он находится вне диапазона
Для a типа массива A:
- константный индекс должен быть в диапазоне
- если x выходит за пределы диапазона во время выполнения, возникает паника во время выполнения (run-time panic)
- a[x] является элементом массива с индексом x, и тип a[x] является типом элемента A
Для a указателя на тип массива:
- a[x] является сокращением для (*a)[x]
Для a типа среза S:
- если x выходит за пределы диапазона во время выполнения, возникает паника во время выполнения
- a[x] является элементом среза (slice) с индексом x, и тип a[x] является типом элемента S
Для a строкового типа:
- константный индекс должен находиться в диапазоне, если строка а также является константой
- если x выходит за пределы диапазона во время выполнения, возникает паника во время выполнения
- a[x] является непостоянным байтовым значением в индексе x, и тип a[x] является байтовым
- a[x] может не быть назначен
Для a карты (map) типа M:
- тип x должен быть назначен типу ключа M
- если карта содержит запись с ключом x, a[x] является элементом карты с ключом x, а тип a[x] является типом элемента M
- если карта (map) равна нулю (nil) или не содержит такой записи, a[x] является нулевым значением для типа элемента M
В противном случае [x] недопустимо.
Индексное выражение на карте a типа map[K]V, используемое в присваивании или инициализации специальной формы
v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]
дает дополнительное нетипизированное логическое значение. Значение ok равно true, если ключ x присутствует в карте (map), и false в противном случае.
Присвоение элементу нулевой карты (nil map) вызывает панику во время выполнения.
Читайте также:
- Спецификация Go: первичные выражения (primary expressions), селекторы (selectors)
- Спецификация Go: типы массивов (array), типы срезов (slice)
- Спецификация Go: типы карты (map types)
Комментариев нет:
Отправить комментарий