Какой метод sync.WaitGroup необходимо вызвать, чтобы заблокировать текущую горутину до завершения всех горутин в группе?
  Anonymous Quiz
    6%
    Add()
      
    9%
    Done()
      
    78%
    Wait()
      
    6%
    Stop()
      
    2%
    Посмотреть результаты
      
    👍4🥱4
  Forwarded from Библиотека Go-разработчика | Golang
  
🏃 Самоучитель по Go для начинающих. Часть 9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
В этом уроке самоучителя подробно рассмотрим структуры, методы и интерфейсы в Go, уделим особое внимание их особенностям и применению. В заключение познакомимся с конструкциями type assertion и type switch.
👉 Читать гайд
📌 Остальные части в серии:
1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
В этом уроке самоучителя подробно рассмотрим структуры, методы и интерфейсы в Go, уделим особое внимание их особенностям и применению. В заключение познакомимся с конструкциями type assertion и type switch.
👉 Читать гайд
📌 Остальные части в серии:
1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
👍4
  Выведет ли данный код true?
  Anonymous Quiz
    28%
    Да
      
    58%
    Нет
      
    6%
    Выведет ошибку компиляции
      
    2%
    Выведет панику во время выполнения
      
    6%
    Посмотреть результаты
      
    🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
  Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Что такое starvation (голодание) в контексте конкурентности в Go?
  Anonymous Quiz
    1%
    Горутина завершается из-за ошибки
      
    86%
    Горутина ожидает доступ к ресурсу, но не может получить, т. к. др. горутины постоянно его используют
      
    3%
    Горутина занимает слишком много памяти
      
    5%
    Горутина выполняется слишком долго без перерыва.
      
    5%
    Посмотреть результаты
      
    Что выведет код?
  Anonymous Quiz
    52%
    true
      
    27%
    false
      
    2%
    Ничего не выведет
      
    7%
    Ошибку компиляции
      
    12%
    Посмотреть результаты
      
    🤔19👍4
  Forwarded from Библиотека Go-разработчика | Golang
В Go новички часто сталкиваются с проблемой интерфейсных переменных, которым присваивае
тся nil указатель. В таком случае, хотя значение в интерфейсе является nil, сама переменная интерфейса не равна nil.Пример: создаем перемен
ную x как указатель на int, который по умолчанию nil, и переменную y как пустой интерфейс, который тоже nil по умолчанию. После присваивания x переменной y, интерфейс y уже не является nil, хотя x все еще nil.
var x *int
var y any
y = x
📌 Что верне
т y == nil? Верне
т false. Это потому, что интерфейс не просто представляет значение, которое ему присвоено, а действует как контейнер для этого значения.Для проверки, является ли значение в интерфейс
е nil, нужно использовать утверждение типа. Например, для проверки y на nil, используем:
y.(*int) == nil
Это показывает, что интерфейс
y не nil, но содержащееся в нем значение — nil. Полный пример здесь.#tip
Please open Telegram to view this post
    VIEW IN TELEGRAM
  go.dev
  
  Go Playground - The Go Programming Language
  
🔥4🤔1
  Есть буферизованный канал с определенной емкостью и горутина, которая читает из него данные. Что произойдет, если канал закроется, хотя в нем еще остались данные?
  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
  