суббота, 22 июня 2019 г.

Спецификация Go: длина и емкость

Встроенные функции len и cap принимают аргументы различных типов и возвращают результат типа int. Реализация гарантирует, что результат всегда вписывается в int.

Вызов     Тип аргумента    Результат

len(s)    string type      длина строки в байтах
          [n]T, *[n]T      длина массива (== n)
          []T              длина среза
          map[K]T          длина карты (количество определенных ключей)
          chan T           количество элементов находящихся в очереди в буфере канала

cap(s)    [n]T, *[n]T      длина массива (== n)
          []T              емкость среза
          chan T           емкость буфера канала

Емкость среза - это количество элементов, для которых есть место, выделенное в базовом массиве. В любое время сохраняются следующие отношения:

0 <= len(s) <= cap(s)

Длина нулевого среза, карты или канала равна 0. Емкость нулевого среза или канала равна 0.

Выражение len(s) является константой, если s является строковой константой. Выражения len(s) и cap(s) являются константами, если тип s является массивом или указателем на массив, а выражение s не содержит получения канала или (неконстантных) вызовов функций; в этом случае s не оценивается. В противном случае, вызовы len и cap не являются постоянными и s оценивается.

const (
    c1 = imag(2i)                    // imag(2i) = 2.0 является константой
    c2 = len([10]float64{2})         // [10]float64{2} не содержит вызовов функций
    c3 = len([10]float64{c1})        // [10]float64{c1} не содержит вызовов функций
    c4 = len([10]float64{imag(2i)})  // imag(2i) является константой, и вызов функции не выполняется
    c5 = len([10]float64{imag(z)})   // недействительно: imag(z) является (непостоянным) вызовом функции
)
var z complex128


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


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

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