четверг, 6 июня 2019 г.

Спецификация Go: индексные выражения (index expressions)

Первичное выражение (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) вызывает панику во время выполнения.


Читайте также:


Комментариев нет:

Отправить комментарий