Можно ли каким-то образом вывести имя переменной в golang?
Я хочу написать функцию для обработки ошибок при преобразовании интерфейсов, хотелось бы чтобы она работала примерно таким образом:
func ErrInterfaceConvertingWrapper(variable interface{}) error {
// variableName это имя переменной, переданной в функцию,
// которое хотелось бы получить без явного указания в аргументах
return fmt.Errorf("не удалось преобразовать интерфейс %s в тип %T", varibleName, variable)
}
Имеются ли способы получить имя переменной каким-либо образом, в пакете reflect нашел методы только для полей структур и ключей map
Ответы (1 шт):
В свою функцию вы получаете не переменную, а объект, который она содержит. Соответветственно, в вашей функции переменная называется variable, а то, как она называлась в точке вызова, безнадёжно потеряно.
На самом деле имя переменной компилятор вовсе не хранит, заменя его смещением на стеке. Поэтотму ответ на ваш вопрос никак. В Go вы никак не можете получить имя переменной по объекту, который в ней содержался, так как переменная - это всего лишь область памяти на стеке. Можно было бы попробовать извлечь это имя из отладочной информации, но API отладчика доступно только для внешних клиентов. Как пользоваться им изнутри программы - не документировано.