Освобождение инструмента 'generate' открывает множество интересных возможностей. Я пытался улучшить свои тесты. У меня есть функция, которая запрашивает внешний API, расположение этого API определено в глобальной переменной. Одна часть головоломки заменяет это значение значением, определяемым в «время генерации».сгенерируйте с помощью gofmt, заменив значение переменной
у меня есть:
//go:generate gofmt -w -r "var apiUrl = a -> var apiUrl = \"http://example.com\"" $GOFILE
Запуск идут генерировать то ошибки с помощью:
parsing pattern var apiUrl = a at 1:1: expected operand, found 'var'
Это не вариант использовать держатель место так:
gofmt -r 'API_GOES_HERE -> "http://example.com"' -w
Это потому, что , когда я компилирую производственный код, источник переписывается, поэтому последующие компиляции для тестирования больше не могут замените держатель места (он уже был заменен).
Я понимаю, что я злоупотребляю gofmt
, но я бы предпочел не вернуться к sed
. Что было бы действительным заявлением go:generate
?
После обширного поиска, я довольно уверен, что это невозможно с помощью только gofmt. Хорошей новостью является то, что сгенерируйте can, AFAIK, запустите произвольные скрипты в вашей $ PATH, чтобы вы могли получить возможность генерировать, чтобы запускать sed или что-то еще просто отлично. – LinearZoetrope
Я боялся, что вы пришли к такому выводу. Вернемся к 'sed'. Благодарю. – harm
Да, я думаю, что единственный реальный способ - написать собственный сценарий генерации и шаблон, используя os.Expand или что-то в этом роде, и если вы можете сделать то же самое с sed, вы можете также просто sed. – LinearZoetrope