Функция reflect.FuncOf
Функция reflect.FuncOf создает новый тип функции во время выполнения программы. В первый параметр передается слайс типов аргументов, во второй - слайс типов результатов, третий параметр указывает, должна ли функция принимать переменное количество аргументов. Функция возвращает значение типа reflect.Type, представляющее созданный тип функции.
Синтаксис
reflect.FuncOf(in []reflect.Type, out []reflect.Type, variadic bool) reflect.Type
Пример
Давайте создадим тип функции, принимающей два целых числа и возвращающей их сумму:
package main
import (
"fmt"
"reflect"
)
func main() {
intType := reflect.TypeOf(0)
funcType := reflect.FuncOf(
[]reflect.Type{intType, intType},
[]reflect.Type{intType},
false,
)
fmt.Println(funcType)
}
Результат выполнения кода:
"func(int, int) int"
Пример
Давайте создадим тип функции, принимающей строку и возвращающей ее длину и саму строку:
package main
import (
"fmt"
"reflect"
)
func main() {
stringType := reflect.TypeOf("")
intType := reflect.TypeOf(0)
funcType := reflect.FuncOf(
[]reflect.Type{stringType},
[]reflect.Type{intType, stringType},
false,
)
fmt.Println(funcType)
}
Результат выполнения кода:
"func(string) (int, string)"
Пример
Давайте создадим функцию с переменным количеством аргументов, которая принимает любое количество целых чисел и возвращает их сумму:
package main
import (
"fmt"
"reflect"
)
func main() {
intType := reflect.TypeOf(0)
funcType := reflect.FuncOf(
[]reflect.Type{intType},
[]reflect.Type{intType},
true,
)
fmt.Println(funcType)
}
Результат выполнения кода:
"func(int, ...int) int"
Пример
Давайте создадим функцию без аргументов, возвращающую строку:
package main
import (
"fmt"
"reflect"
)
func main() {
stringType := reflect.TypeOf("")
funcType := reflect.FuncOf(
[]reflect.Type{},
[]reflect.Type{stringType},
false,
)
fmt.Println(funcType)
}
Результат выполнения кода:
"func() string"
Смотрите также
-
функцию
reflect.TypeOf,
которая возвращает тип переменной -
функцию
reflect.MakeFunc,
которая создает функцию из созданного типа -
функцию
reflect.StructOf,
которая создает структуру во время выполнения -
функцию
reflect.SliceOf,
которая создает тип среза