Можно ли получить адрес ссылки функции в Go?Как получить адрес функции в go?
Что-то вроде
func myFunction() {
}
// ...
unsafe.Pointer(&myFunction)
Просто это не работает таким образом. Думаю, это невозможно, но я еще не нашел доказательств.
Edit: Фон
Фоновый моего вопроса исходит от работы с ОЦП и C указатели на функции. Это работает:
/*
void go_myFunction();
typedef void (*myFunction_f)();
myFunction_f pMyFunction;
*/
import "C"
//export go_myFunction
func go_myFunction() {
// ...
}
func SetupFp() {
C.pMyFunction = (*[0]byte)(unsafe.Pointer(C.go_myFunction))
}
Я также знаю, что в документации говорится, что передавая указатель на функцию ходу не работает. Но приведенный выше код кажется не таким далеким от него. Мне просто интересно, можно ли как-то пропустить шаг экспорта.
См [Адресные Операторы] (https://golang.org/ref/spec#Address_operators) в спецификации. 'Операнд должен быть адресуемым, то есть либо переменной, либо указателем, либо индексированием фрагмента; или селектор поля адресного структурного операнда; или операцию индексации массива адресного массива. – JimB
Поскольку в Go нет такой вещи, как адрес функции, что вы на самом деле пытаетесь сделать? – JimB
Возможный дубликат [golang reflect get get function function pointer] (http://stackoverflow.com/questions/36126552/golang-reflect-get-closure-function-pointer/36127142#36127142); и [Как сравнить 2 функции в Go?] (http://stackoverflow.com/questions/34901307/how-to-compare-2-functions-in-go/34901677#34901677) – icza