-1

以下のテスト プログラムは、\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 で動作する必要があります。

4

2 に答える 2