Что выведет код?
  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: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
  Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Что выведет код?
  Anonymous Quiz
    15%
    1 2 3
      
    18%
    1 3 2
      
    50%
    3 2 1
      
    3%
    2 1 3
      
    5%
    Панику во время выполнения
      
    4%
    Ошибку компиляции
      
    6%
    Посмотреть результаты
      
    👍12❤1
  Что выведет код?
  Anonymous Quiz
    45%
    1 1
      
    27%
    3 3
      
    4%
    0 0
      
    7%
    Панику во время выполнения
      
    7%
    Ошибку компиляции
      
    11%
    Посмотреть результаты
      
    ❤7🌚6👍2
  