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

Константа reflect.Func представляет собой константу типа reflect.Kind, которая обозначает, что значение является функцией. Она используется в методах reflect.Value.Kind и reflect.Type.Kind для определения типа значения во время выполнения. Это позволяет проверять, является ли значение функцией, и безопасно выполнять операции, связанные с функциями, такие как вызов через reflect.Value.Call.

Синтаксис

goconst Func = 19

Константа имеет числовое значение 19, но в коде принято использовать именованную константу reflect.Func для улучшения читаемости.

Пример

Давайте проверим, является ли значение функцией с помощью константы reflect.Func:

gopackage main

import (
  "fmt"
  "reflect"
)

func testFunc() {}

func main() {
  fn := testFunc
  val := reflect.ValueOf(fn)
  if val.Kind() == reflect.Func {
    fmt.Println("value is a function")
  }
}

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

go"value is a function"

Пример

Проверим, что не-функция не будет идентифицирована как reflect.Func:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  num := 42
  val := reflect.ValueOf(num)
  if val.Kind() == reflect.Func {
    fmt.Println("this is a function")
  } else {
    fmt.Println("this is not a function")
  }
}

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

go"this is not a function"

Пример

Использование reflect.Func в комбинации с reflect.Type для проверки типа функции:

gopackage main

import (
  "fmt"
  "reflect"
)

func add(a, b int) int {
  return a + b
}

func main() {
  typ := reflect.TypeOf(add)
  if typ.Kind() == reflect.Func {
    fmt.Printf("type is a function, num params: %d\n", typ.NumIn())
  }
}

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

go"type is a function, num params: 2"

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

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