📕
Golang
  • Собеседование по golang
  • Вопросы собеседования
    • Список вопросов МТС
    • Список вопросов
    • Базовые вопросы по Golang
    • Go. Прорабатываем 25 основных вопросов собеседования
    • Функции
    • Структуры данных
    • Конкурентность и Параллелизм
    • Горутины
    • Примитивы синхронизации
    • Планировщик
    • Go: конкурентность и привязки к потокам в планировщике
    • Каналы
    • GC
  • спецификация
    • Спецификация Go: преобразования в и из строкового типа
    • переключатель типов (type switch)
    • for утверждения (for statements)
    • for утверждения с range условием
    • go утверждения (go statements)
    • select утверждения (select statements)
    • return утверждения (return statements)
    • continue утверждения (continue statements)
    • goto утверждения (goto statements)
    • fallthrough утверждения (fallthrough statements, утверждения "провала")
    • defer утверждения (defer statements)
    • встроенные функции, функция close
    • длина и емкость
    • аллокация, создание срезов (slice), карт (map) и каналов
    • добавление в срезы и копирование срезов
    • удаление элементов карты
    • обработка паники
    • начальная загрузка (bootstrapping)
    • пакеты
    • инициализация и выполнение программы, нулевое значение
    • инициализация пакета
    • выполнение программы
    • ошибки
    • паника во время выполнения (run-time panic)
  • Эффективный go
    • эффективный go
    • 50 оттенков go
    • Go: распространенные антипаттерны
    • Визуализация concurrency в Go с WebGL
  • требования для работы
    • Список навыков
  • habr
    • Изучаем многопоточное программирование в Go по картинкам
    • Go: конкурентность и привязки к потокам в планировщике
  • NP
    • Полиморфизм с интерфейсами в Golang
    • Объектно-ориентированное программирование в Golang
    • Владеешь merge  -  освой и rebase
  • ProgLib
    • Горутины
  • Untitled
  • Оптимизация
    • Go: Должен ли я использовать указатель вместо копии моей структуры?
  • Полезняшки
    • Using PostgreSQL JSONB with Go
Powered by GitBook
On this page

Was this helpful?

  1. спецификация

длина и емкость

Встроенные функции 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
Previousвстроенные функции, функция closeNextаллокация, создание срезов (slice), карт (map) и каналов

Last updated 4 years ago

Was this helpful?