Константа reflect.Slice
Константа reflect.Slice является частью перечисления reflect.Kind
и представляет тип данных "слайс" в пакете reflect. Она используется
для определения того, является ли значение отражения слайсом.
В сочетании с методом Kind константа позволяет проверять тип
переменной во время выполнения программы.
Синтаксис
v.Kind() == reflect.Slice
Пример
Давайте проверим, является ли переменная типа []int слайсом:
package main
import (
"fmt"
"reflect"
)
func main() {
s := []int{1, 2, 3, 4, 5}
v := reflect.ValueOf(s)
if v.Kind() == reflect.Slice {
fmt.Println("Variable is a slice")
}
}
Результат выполнения кода:
"Variable is a slice"
Пример
Давайте проверим, является ли переменная типа []string слайсом:
package main
import (
"fmt"
"reflect"
)
func main() {
s := []string{"a", "b", "c", "d", "e"}
v := reflect.ValueOf(s)
if v.Kind() == reflect.Slice {
fmt.Println("Variable is a slice")
}
}
Результат выполнения кода:
"Variable is a slice"
Пример
Давайте сравним слайс с массивом и покажем разницу в типах:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []int{1, 2, 3}
array := [3]int{1, 2, 3}
sliceVal := reflect.ValueOf(slice)
arrayVal := reflect.ValueOf(array)
fmt.Println(sliceVal.Kind() == reflect.Slice)
fmt.Println(arrayVal.Kind() == reflect.Slice)
}
Результат выполнения кода:
true
false
Пример
Давайте используем константу reflect.Slice для проверки типа
в функции-обработчике:
package main
import (
"fmt"
"reflect"
)
func checkType(val interface{}) {
v := reflect.ValueOf(val)
if v.Kind() == reflect.Slice {
fmt.Printf("Value is a slice with length %d\n", v.Len())
} else {
fmt.Println("Value is not a slice")
}
}
func main() {
checkType([]string{"a", "b", "c"})
checkType("abcde")
}
Результат выполнения кода:
"Value is a slice with length 3"
"Value is not a slice"
Смотрите также
-
константу
reflect.Kind,
которая представляет тип данных в пакете reflect -
функцию
reflect.Type.Kind,
которая возвращает тип данных отражения -
функцию
reflect.Value.Kind,
которая возвращает тип значения отражения -
функцию
reflect.MakeSlice,
которая создает новый слайс в пакете reflect