2015-02-17 4 views
1

У меня есть идти генерировать директива, которая выглядит следующим образом:Go генерирует экранирующие символы

//go:generate myprog -someName thisname -data 'Request: Typ "." callMe, Rsp: MyTyp "." close' 

Вопрос заключается в том, что программа получает только значение -someName флага («thisname»). Я предполагаю, что флаг -data по некоторым причинам отбрасывается. Любая идея почему? Он работает, если я запускаю программу непосредственно из командной строки, поэтому я предполагаю, что это конкретная проблема.

ответ

4

Из проекта документа идут генерировать https://docs.google.com/document/d/1V03LUfjSADDooDMhe-_K59EgpTEm3V8uvQRuNMAEnjg/edit:

Аргументы, разделенные пробелами лексем (или двойных кавычках) передается на генератор в качестве индивидуальных аргументов при запуске.

Поэтому, если вы хотите передать аргумент, содержащий пробел, вам придется их удвоить. Вы использовали одинарные кавычки, которые работают в вашей оболочке, но не с go generate

+0

Это похоже на случай, хотя мне неловко, что вы не можете использовать одинарные кавычки. Теперь моя директива будет иметь несколько символов обратной косой черты, чтобы избежать двойных кавычек. Считаете ли вы, что это имеет какой-то шанс в качестве запроса функции/улучшения или есть веские причины, по которым он не принимает одинарные кавычки? –

+1

Я сомневаюсь, что такой запрос функции найдет много сторонников: Go сгенерирует простой механизм, и после введения одинарных кавычек кто-то попросит обратные кавычки, а следующий - для тройных кавычек (двойных и одиночных), подобных python, только потому, что он делает одно использование of go создают немного проще. Go generate не является ни для конечного пользователя, ни для пользователя вашего пакета. Инвестирование 5 или, может быть, 15 минут, чтобы правильно процитировать несколько двойных комментариев, кажется подходящим для программиста. – Volker

Смежные вопросы