РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
455 of 1593 menu

Пустая структура struct{

}

Пустая структура struct{} - это структура без полей. Главная ее особенность в том, что она не занимает памяти. Размер экземпляра struct{} равен нулю байт. Это делает ее идеальным кандидатом для ситуаций, когда важна только информация о существовании значения, а не само значение.

Синтаксис

var s struct{} // или s := struct{}{}

Объявление переменной типа struct{} не требует выделения памяти. Это полезно для создания множеств (set) на основе map, где ключи важны, а значения - нет.

Пример

Рассмотрим использование struct{} для создания множества строк. Мы будем использовать map[string]struct{}, где ключ - это элемент множества, а значение - пустая структура.

package main import "fmt" func main() { set := make(map[string]struct{}) set["apple"] = struct{}{} set["banana"] = struct{}{} set["apple"] = struct{}{} // дубликат не добавится _, ok := set["apple"] fmt.Println("apple exists:", ok) _, ok = set["grape"] fmt.Println("grape exists:", ok) }

Результат выполнения кода:

apple exists: true grape exists: false

Здесь struct{} используется как заглушка для значения, так как нам важно только наличие ключа в карте.

Пример

Еще одно распространенное применение struct{} - это отправка сигналов через каналы. Канал типа chan struct{} используется для уведомления о событии без передачи данных.

package main import ( "fmt" "time" ) func main() { done := make(chan struct{}) go func() { time.Sleep(2 * time.Second) close(done) // сигнал о завершении }() fmt.Println("Waiting for signal...") <-done fmt.Println("Signal received, exiting.") }

Результат выполнения кода:

Waiting for signal... Signal received, exiting.

В этом примере канал done типа chan struct{} используется для синхронизации горутин. Закрытие канала служит сигналом для основной горутины о завершении работы. Использование struct{} вместо, например, bool подчеркивает, что передается только факт события, а не данные.

Смотрите также

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить