Константа reflect.Func
Константа reflect.Func представляет собой константу типа reflect.Kind,
которая обозначает, что значение является функцией. Она используется
в методах reflect.Value.Kind и reflect.Type.Kind
для определения типа значения во время выполнения. Это позволяет
проверять, является ли значение функцией, и безопасно выполнять
операции, связанные с функциями, такие как вызов через
reflect.Value.Call.
Синтаксис
const Func = 19
Константа имеет числовое значение 19, но в коде принято
использовать именованную константу reflect.Func
для улучшения читаемости.
Пример
Давайте проверим, является ли значение функцией
с помощью константы reflect.Func:
package 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")
}
}
Результат выполнения кода:
"value is a function"
Пример
Проверим, что не-функция не будет идентифицирована
как reflect.Func:
package 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")
}
}
Результат выполнения кода:
"this is not a function"
Пример
Использование reflect.Func в комбинации с
reflect.Type для проверки типа функции:
package 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())
}
}
Результат выполнения кода:
"type is a function, num params: 2"
Смотрите также
-
константу
reflect.Kind,
которая представляет собой базовый тип значения -
функцию
reflect.Type.Kind,
которая возвращает вид типа -
функцию
reflect.Value.Kind,
которая возвращает вид значения -
функцию
reflect.Value.Call,
которая вызывает функцию через рефлексию