Функция 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,
которая создает тип слайса из указанного типа элементов