Тестовая программа, приведенная ниже, работает как нужно, используя строку DEFAULT, имеющую кодовые точки, такие как \ u00F C, а также если код этого типа кодируется как строка в программе. Передача той же строки из строки cmd, например: prog.exe -input = "ABC \ u00F C" не выполняется. Я предполагал, что это взаимодействие с ОС, поэтому попробовал другие цитаты, даже обернув их, например: «(ABC \ u00F C)» и обрезав парены внутри забавного c NG.
Является ли «для _», 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.