2

Pflag librarayの StringSliceP を使用しています。文字列のリストを CLI 引数として受け入れます。

Windows コマンド プロンプトから Go アプリケーションを呼び出しています。

リストの一部の文字列に ( ") 二重引用符を含めたいのですが、できませんでした。

引用符のエスケープは機能しません:

goapp.exe --string-slice-list "a\"b",c,d,e

期待される結果:[]string{"a\"b", "c", "d", "e"}

実結果:Error: invalid argument "a\"\\b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field

引用符を 2 倍にしてもうまくいきません。

goapp.exe --string-slice-list "a""b",c,d,e

期待される結果:[]string{"a\"b", "c", "d", "e"}

実結果:Error: invalid argument "a\"b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field

4

1 に答える 1

1

Windows コマンド プロンプトから実行する方法は次のとおりです。

goapp.exe --string-slice-list \"a\"\"b\",c,d,e

収量[a"b c d e]

goapp.exe --string-slice-list \"a\\\"\"b\",c,d,e

[a\"b c d e]ます(実際にどちらが必要かわかりません)。

この理由は、指摘されているように、Pflag ライブラリがRFC 4180で説明されている形式をサポートするGo 標準ライブラリencoding/csvを利用しているためです。パラグラフ 5、6、および 7 からセクション 2 を参照すると、次のようになります。

フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符が表示されないことがあります。

改行 (CRLF)、二重引用符、およびコンマを含むフィールドは、二重引用符で囲む必要があります。

二重引用符を使用してフィールドを囲む場合、フィールド内にある二重引用符は、その前に別の二重引用符を付けてエスケープする必要があります。

于 2021-10-21T09:22:06.250 に答える