Есть буферизованный канал с определенной емкостью и горутина, которая читает из него данные. Что произойдет, если канал закроется, хотя в нем еще остались данные?
  Anonymous Quiz
    6%
    Паника во время выполнения
      
    15%
    Данные в канале будут потеряны
      
    54%
    Горутина сможет продолжить чтение данных до тех пор, пока канал не станет пустым
      
    14%
    Никаких изменений не произойдет до тех пор, пока не будут считаны все данные
      
    6%
    deadlock
      
    5%
    Посмотреть результаты
      
    Что выведет код?
  Anonymous Quiz
    14%
    0
      
    28%
    1
      
    37%
    NaN
      
    7%
    Ошибку компиляции
      
    5%
    Панику во время выполнения
      
    8%
    Посмотреть результаты
      
    Что выведет код?
  Anonymous Quiz
    2%
    0
      
    30%
    1
      
    54%
    2
      
    3%
    Панику во время выполнения
      
    4%
    Ошибку компиляции
      
    6%
    Посмотреть результаты
      
    Что выведет код?
  Anonymous Quiz
    64%
    2
      
    22%
    Ошибку компиляции
      
    4%
    Панику во время выполнения
      
    7%
    Ошибку компиляции
      
    2%
    Посмотреть результаты
      
    Forwarded from Библиотека Go-разработчика | Golang
💡Стек или куча?
🤔 Живет ли переменная на стеке вызовов, или она динамически выделена в куче?
В большинстве случаев вам не стоит беспокоиться об этом. Go собирает мусор и автоматически очищает неиспользуемые переменные.
Однако сборка мусора имеет свою цену, поэтому чем меньше выделений делает ваш код, тем быстрее он может работать.
📌 Как узнать, выделяется ли переменная в куче?
Некоторые операции по умолчанию вызывают выделение памяти в куче и поэтому легко обнаруживаются и исправляются. Вот несколько примеров:
🔸Строковые переменные неизменяемы. Конкатенация двух строк приводит к новой аллокации и сборке мусора. В качестве альтернативы можно использовать
🔸Срезы, которые растут за пределы своей емкости, реаллоцируются. Решение: предварительно выделить срез с помощью
🔸Когда функция создает локальную переменную и возвращает указатель на эту переменную, переменная должна быть выделена в куче.
📌 Однако есть ситуации, когда выделения в куче неочевидны. Подумайте об указателях, скрытых внутри других типов данных, таких как срезы или мапы. Или рассмотрите массивы. Если массив слишком большой, чтобы жить на стеке, он выделяется в куче.
📌 Как найти эти случаи выделения в куче?
Запустите или скомпилируйте свой код с флагом сборки мусора "
#tip
🤔 Живет ли переменная на стеке вызовов, или она динамически выделена в куче?
В большинстве случаев вам не стоит беспокоиться об этом. Go собирает мусор и автоматически очищает неиспользуемые переменные.
Однако сборка мусора имеет свою цену, поэтому чем меньше выделений делает ваш код, тем быстрее он может работать.
📌 Как узнать, выделяется ли переменная в куче?
Некоторые операции по умолчанию вызывают выделение памяти в куче и поэтому легко обнаруживаются и исправляются. Вот несколько примеров:
🔸Строковые переменные неизменяемы. Конкатенация двух строк приводит к новой аллокации и сборке мусора. В качестве альтернативы можно использовать
strings.Builder.🔸Срезы, которые растут за пределы своей емкости, реаллоцируются. Решение: предварительно выделить срез с помощью
make().🔸Когда функция создает локальную переменную и возвращает указатель на эту переменную, переменная должна быть выделена в куче.
📌 Однако есть ситуации, когда выделения в куче неочевидны. Подумайте об указателях, скрытых внутри других типов данных, таких как срезы или мапы. Или рассмотрите массивы. Если массив слишком большой, чтобы жить на стеке, он выделяется в куче.
📌 Как найти эти случаи выделения в куче?
Запустите или скомпилируйте свой код с флагом сборки мусора "
-m", и команда Go выведет заметку каждый раз, когда переменная перемещается или уходит со стека в кучу:go run -gcflags "-m"
или
go tools compile -m
#tip
👍9❤2
  Что выведет код?
  Anonymous Quiz
    40%
    true
      
    35%
    false
      
    9%
    Панику во время выполнения
      
    9%
    Ошибку компиляции
      
    7%
    Посмотреть результаты
      
    Что выведет код?
  Anonymous Quiz
    45%
    true
      
    47%
    false
      
    2%
    Панику во время выполнения
      
    3%
    Ошибку компиляции
      
    4%
    Посмотреть результаты
      
    👏8
  Что выведет код?
  Anonymous Quiz
    49%
    0
      
    45%
    1
      
    2%
    Панику во время выполнения
      
    2%
    Ошибку компиляции
      
    2%
    Посмотреть результаты
      
    🤔13👍5
  Что выведет код?
  Anonymous Quiz
    69%
    false
      
    20%
    true
      
    4%
    Панику во время выполнения
      
    3%
    Ошибку компиляции
      
    4%
    Посмотреть результаты
      
    ❤1
  🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
  Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.