cpp

Пустая структура в качестве типа данных канала

Структура может вообще не иметь полей. Размер такой пустой структуры равен 0. Пример создания пустой структуры:

var obj struct{}
fmt.Println(obj)                // {}
fmt.Println(unsafe.Sizeof(obj)) // 0

Пустую структуру можно указать в качестве типа данных канала. Зачем это нужно? Основное предназначение заключается в возможности дождаться завершения одного потока внутри другого потока. Внутри первого потока вставляется инструкция чтения из канала. Внутри второго потока при завершении работы канал закрывается. Благодаря этому первый поток продолжит работу (листинг 18.16).

Листинг 18.16. Пустая структура в качестве типа данных канала

package main

import "fmt"

func main() {
   arr := make([]int, 5)
   ch := make(chan struct{})
   go func() {
      defer close(ch) // Закрываем канал
      for i := 0; i < 5; i++ {
         arr[i] = i + 1
      }
      fmt.Println("Конец потока")
   }()
   <-ch // Ожидаем закрытия канала
   for _, v := range arr {
      fmt.Println(v)
   }
   fmt.Println("Конец функции main()")
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp