Константа reflect.Chan
Константа reflect.Chan представляет собой значение перечисления reflect.Kind,
которое идентифицирует тип данных как канал (channel) в языке Go.
В пакете reflect константа reflect.Chan используется
для проверки, является ли исследуемый тип каналом, а также для
создания новых канальных типов через функцию reflect.ChanOf.
Константа имеет тип reflect.Kind и может быть использована
в сравнениях с результатом метода Kind, который возвращает
тип значения, хранящегося в reflect.Value.
Синтаксис
const Chan = 14
Константа reflect.Chan имеет числовое значение 14
и определена в пакете reflect. Обычно она используется
не по числовому значению, а как символьная константа
для сравнения с результатом метода Kind.
Пример проверки типа канала
Давайте проверим, является ли переменная типа канал,
используя константу reflect.Chan:
package main
import (
"fmt"
"reflect"
)
func main() {
ch := make(chan int)
val := reflect.ValueOf(ch)
if val.Kind() == reflect.Chan {
fmt.Println("This is a channel")
} else {
fmt.Println("This is not a channel")
}
}
Результат выполнения кода:
"This is a channel"
Пример с различными типами
Давайте сравним константу reflect.Chan с разными типами
данных для наглядности:
package main
import (
"fmt"
"reflect"
)
func main() {
var ch chan int
var str string
var slice []int
fmt.Println(reflect.ValueOf(ch).Kind() == reflect.Chan)
fmt.Println(reflect.ValueOf(str).Kind() == reflect.Chan)
fmt.Println(reflect.ValueOf(slice).Kind() == reflect.Chan)
}
Результат выполнения кода:
true
false
false
Пример с каналами разных направлений
Константа reflect.Chan работает для всех видов каналов:
однонаправленных и двунаправленных. Давайте проверим это:
package main
import (
"fmt"
"reflect"
)
func main() {
ch1 := make(chan int)
ch2 := make(<-chan int)
ch3 := make(chan<- int)
fmt.Println(reflect.ValueOf(ch1).Kind() == reflect.Chan)
fmt.Println(reflect.ValueOf(ch2).Kind() == reflect.Chan)
fmt.Println(reflect.ValueOf(ch3).Kind() == reflect.Chan)
}
Результат выполнения кода:
true
true
true
Пример создания канального типа
Константа reflect.Chan используется совместно с функцией
reflect.ChanOf для создания типа канала во время выполнения:
package main
import (
"fmt"
"reflect"
)
func main() {
intType := reflect.TypeOf(0)
chanType := reflect.ChanOf(reflect.BothDir, intType)
fmt.Println(chanType.Kind() == reflect.Chan)
fmt.Println(chanType.String())
}
Результат выполнения кода:
true
"chan int"
Смотрите также
-
константу
reflect.Kind,
которая является базовым типом для всех констант -
функцию
reflect.ChanOf,
которая создает тип канала во время выполнения -
метод
reflect.Value.Kind,
который возвращает вид значения, хранящегося в рефлективном значении -
константу
reflect.Slice,
которая представляет тип слайса в пакете reflect