在使用指令時,如何在標志值中獲得空格?
語境
flag包接收和/或處理帶有空格的標志的方式不同,取決于Go的呼叫方式。參考標志value在命令列中是有效的,但在指令中就不行了,比如說go generate,
換句話說,從命令列中呼叫,Flag1將收到正確的值(即,4個字,3個空格)。
作品
% go run -tags generate main.go -Flag1="flag value with spaces"
不起作用
然而,在指令檔案中呼叫完全相同的命令,例如,用go generate ./...,Flag1將不會收到正確的值。以一個指令檔案為例(例如,generate.go),其中有這樣一行:
//go:generate go run -tags generate main.go -Flag1="有空格的標志值" -Flag2=next
Flag1沒有正確設定,Flag2根本就沒有設定。
uj5u.com熱心網友回復:
go run的引數是由你的shell決議的。 go:generate指令會做它自己的決議,而且這種決議與shell是不同的。
相關的go:generation 檔案是:
指令的引數是以空格分隔的標記或雙引號字串,在運行時作為單獨的引數傳遞給生成器。
帶引號的字串使用Go語法,并在執行前進行評估;帶引號的字串作為一個引數出現在生成器中。
每個引數都由空格隔開。一個引數可以是一個 "token",也可以是一個雙引號字串。檔案中沒有描述令牌,但我們可以假設它是指一串非空格的字符。
引號字串被評估。 這意味著引號被移除,轉義序列被取消,等等。 該實作使用strconv.Unquote評估該字串。
基于上述情況,使用:
//go:generate go run -tags generate main.go "-Flag1=flag value with spaces"
這里重要的變化是"被向前移動到一個以空格為首的位置。 符號內的引號被忽略了。
uj5u.com熱心網友回復:
從一個舊的、相關的、但不是相同的問題推斷,將整個標志鍵、破折號和值用引號括起來。
//go:generate go run -tags generate main.go "-Flag1=flag value with spaces"
這種語法的優點是可以在命令列或指令檔案中作業。
目前的檔案(我所能找到的)都沒有提供明確的答案:
flag 檔案沒有提到帶有空格的標志值。
帶引號的字串使用 Go 語法,并在執行前被評估;帶引號的字串作為一個引數出現在生成器中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313773.html
標籤:
