Получить имя функции с помощью отражения
В Go отражение предоставляет механизм для проверки и управления структурами программы во время выполнения. Доступ к имени функции является одним из таких вариантов использования. Однако попытка получить имя непосредственно из его типа может привести к получению пустой строки.
Ожидаемое поведение
Получение имени функции с помощью Reflection.TypeOf(function). Name() возвращает пустую строку, поскольку она указывает на сам тип, который не содержит имени функции.
Решение
Чтобы получить имя функции, мы необходимо использовать runtime.FuncForPC. Эта функция принимает указатель на отраженное значение функции и возвращает указатель на структуру *Func. Вызов метода Name для этой *Func дает ожидаемое имя функции в следующем виде:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
This подход возвращает как имя пакета, так и имя функции, например. "пакет.функция". При желании имя пакета можно извлечь путем токенизации строки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3