获取 Golang 标志作为字节数组

我正在使用flag包来读取我传递给 Golang 程序的所有参数。的问题是,如果我传递参数如"\x41BC",它不是读为3字节阵列(字符'A''B''C'),但作为一个6字节阵列('\''x''4''1''B''C')。

如果回答可能有用,我正在使用以下方法阅读该字符串:

flag.StringVar(&param, "param", "", "the param with hex chars")

有没有办法避免这种情况?


胡子哥哥
浏览 158回答 1
1回答

蝴蝶不菲

"\x41BC"是一个带引号的字符串。该flag包不会取消任何引用,它只会将启动应用程序时指定的参数交给您。您可以使用strconv.Unquote()和strconv.UnquoteChar()函数来取消引用它们。您应该注意的一件事是,strconv.Unquote()只能取消引号中的字符串(例如,以引号字符"或反引号字符开头和结尾`),因此我们必须手动附加它。看这个例子:s := `\x41BC`fmt.Println(s)s2, err := strconv.Unquote(`"` + s + `"`)if err != nil {    panic(err)}fmt.Println(s2)输出(在Go Playground上试试):\x41BCABC因此,如果您希望能够提供带引号的字符串作为命令行参数并且仍然具有未引用的值,则必须strconv.Unquote()在调用后取消引用它们flag.Parse(),例如:var param stringflag.StringVar(&param, "param", "", "the param with hex chars")flag.Parse()var err errorparam, err = strconv.Unquote(`"` + param + `"`)if err != nil {    panic(err) // handle error}// param now contains the unquoted argument value
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go