Константа reflect.Slice

Константа reflect.Slice является частью перечисления reflect.Kind и представляет тип данных "слайс" в пакете reflect. Она используется для определения того, является ли значение отражения слайсом. В сочетании с методом Kind константа позволяет проверять тип переменной во время выполнения программы.

Синтаксис

gov.Kind() == reflect.Slice

Пример

Давайте проверим, является ли переменная типа []int слайсом:

gopackage 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")
  }
}

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

go"Variable is a slice"

Пример

Давайте проверим, является ли переменная типа []string слайсом:

gopackage 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")
  }
}

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

go"Variable is a slice"

Пример

Давайте сравним слайс с массивом и покажем разницу в типах:

gopackage 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)
}

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

gotrue
false

Пример

Давайте используем константу reflect.Slice для проверки типа в функции-обработчике:

gopackage 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")
}

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

go"Value is a slice with length 3"
"Value is not a slice"

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

  • константу reflect.Kind,
    которая представляет тип данных в пакете reflect
  • функцию reflect.Type.Kind,
    которая возвращает тип данных отражения
  • функцию reflect.Value.Kind,
    которая возвращает тип значения отражения
  • функцию reflect.MakeSlice,
    которая создает новый слайс в пакете reflect