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

Функция reflect.ChanOf

Функция reflect.ChanOf создает тип канала с указанным направлением и типом элементов. Первый параметр определяет направление канала: reflect.BothDir для двунаправленного, reflect.SendDir для отправляющего и reflect.RecvDir для принимающего. Второй параметр принимает тип элементов канала, полученный через reflect.TypeOf. Функция возвращает значение типа reflect.Type, представляющее результирующий тип канала.

Синтаксис

reflect.ChanOf(dir reflect.ChanDir, t reflect.Type) reflect.Type

Пример

Создадим тип канала для передачи целых чисел:

package main import ( "fmt" "reflect" ) func main() { chanType := reflect.ChanOf(reflect.BothDir, reflect.TypeOf(0)) fmt.Println(chanType) }

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

"chan int"

Пример

Создадим тип отправляющего канала для строк:

package main import ( "fmt" "reflect" ) func main() { chanType := reflect.ChanOf(reflect.SendDir, reflect.TypeOf("")) fmt.Println(chanType) }

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

"chan<- string"

Пример

Создадим тип принимающего канала для булевых значений:

package main import ( "fmt" "reflect" ) func main() { chanType := reflect.ChanOf(reflect.RecvDir, reflect.TypeOf(true)) fmt.Println(chanType) }

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

"<-chan bool"

Пример

Создадим канал с типом элементов, полученным динамически через reflect.SliceOf:

package main import ( "fmt" "reflect" ) func main() { sliceType := reflect.SliceOf(reflect.TypeOf(0)) chanType := reflect.ChanOf(reflect.BothDir, sliceType) fmt.Println(chanType) }

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

"chan []int"

Пример

Создадим канал и проверим его свойства с помощью методов reflect.Type:

package main import ( "fmt" "reflect" ) func main() { chanType := reflect.ChanOf(reflect.BothDir, reflect.TypeOf("")) fmt.Println("Kind:", chanType.Kind()) fmt.Println("Elem:", chanType.Elem()) fmt.Println("ChanDir:", chanType.ChanDir()) }

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

"Kind: chan" "Elem: string" "ChanDir: 3"

Обратите внимание, что reflect.BothDir имеет числовое значение 3.

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

  • функцию reflect.MakeChan,
    которая создает новый канал на основе типа
  • функцию reflect.TypeOf,
    которая возвращает тип значения во время выполнения
  • функцию reflect.ValueOf,
    которая возвращает отраженное значение для работы с данными
  • функцию reflect.SliceOf,
    которая создает тип слайса из указанного типа элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить