Функция reflect.MakeChan
Функция reflect.MakeChan создает новый канал с заданным типом и размером буфера. Она принимает два параметра: typ - тип канала, который возвращает функция reflect.ChanOf, и buffer - размер буфера канала. Функция возвращает значение типа reflect.Value, представляющее созданный канал.
Синтаксис
reflect.MakeChan(typ reflect.Type, buffer int) reflect.Value
Пример
Давайте создадим небуферизированный канал для строк:
package main
import (
"fmt"
"reflect"
)
func main() {
chanType := reflect.ChanOf(reflect.BothDir, reflect.TypeOf(""))
ch := reflect.MakeChan(chanType, 0)
fmt.Println(ch.Type())
fmt.Println(ch.IsValid())
}
Результат выполнения кода:
chan string
true
Пример
Создадим буферизированный канал для целых чисел:
package main
import (
"fmt"
"reflect"
)
func main() {
intType := reflect.TypeOf(0)
chanType := reflect.ChanOf(reflect.BothDir, intType)
ch := reflect.MakeChan(chanType, 5)
fmt.Println(ch.Len())
fmt.Println(ch.Cap())
}
Результат выполнения кода:
0
5
Пример
Продемонстрируем отправку и получение данных через созданный канал:
package main
import (
"fmt"
"reflect"
)
func main() {
chanType := reflect.ChanOf(reflect.BothDir, reflect.TypeOf(""))
ch := reflect.MakeChan(chanType, 2)
msg := reflect.ValueOf("hello")
ch.Send(msg)
received := ch.Recv()
fmt.Println(received.String())
}
Результат выполнения кода:
"hello"
Смотрите также
-
функцию
reflect.ChanOf,
которая создает тип канала с заданным направлением и типом элементов -
функцию
reflect.MakeSlice,
которая создает срез с указанным типом и длиной -
функцию
reflect.MakeMap,
которая создает карту с указанным типом -
функцию
reflect.Value,
которая представляет значение в системе отражения