Встроенные функции 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
Читайте также:
- Основы Go: размер и вместимость среза
- Эффективный Go: данные, аллокация с помощью make
- Эффективный Go: срезы (slices)
Комментариев нет:
Отправить комментарий