以下のテスト プログラムは、\u00FC のようなコード ポイントを持つ DEFAULT 文字列を使用し、そのタイプのコード ポイントがプログラム内の文字列としてコーディングされている場合と同様に、必要に応じて動作します。prog.exe -input="ABC\u00FC" のような cmd ラインから同じ文字列を渡すことはできません。私はそれがOSの相互作用であると仮定したので、「(ABC\u00FC)」のようにラップし、func NG内のかっこをトリミングして、他の引用を試みました。
「for _, runeRead := range []rune」はエスケープされた値に対して正しくありませんか?
package main
import (
"fmt"
"flag"
"os"
)
var input string
var m = make(map[rune]struct{})
func init() {
flag.StringVar(&input, "input", "A7\u00FC", "string of runes")
m['A'] = struct{}{}
m['\u00FC'] = struct{}{}
m['7'] = struct{}{}
}
func main() {
flag.Parse()
ck(input) // cmd line - with default OK
ck("A\u00FC") // hard code - OK
}
func ck(in string) {
for _, runeRead := range []rune(in) {
fmt.Printf("DEBUG: Testing rune: %v %v\n", string(runeRead), byte(runeRead))
if _, ok := m[runeRead]; ! ok {
fmt.Printf("\nERROR: Invalid entry <%v>, in string <%s>.\n", string(runeRead), in)
os.Exit(9)
}
}
}
ソリューションは、Windows と Linux で動作する必要があります。