gpt4 book ai didi

arrays - 获取 Golang 标志作为字节数组

转载 作者:IT王子 更新时间:2023-10-29 02:27:44 25 4
gpt4 key购买 nike

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

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

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

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

提前致谢!

最佳答案

"\x41BC" 是带引号的字符串。 flag package 不会取消引用,它只会将启动应用程序时指定的参数交给您。您可以使用 strconv.Unquote()strconv.UnquoteChar()取消引用它们的函数。

您应该注意的一件事是 strconv.Unquote() 只能取消引号中的字符串(例如,以引号字符 " 开始和结束)或一个反引号 char `),所以我们必须手动附加它。

看这个例子:

s := `\x41BC`
fmt.Println(s)
s2, err := strconv.Unquote(`"` + s + `"`)
if err != nil {
panic(err)
}
fmt.Println(s2)

输出(在 Go Playground 上尝试):

\x41BC
ABC

因此,如果您希望能够提供带引号的字符串作为命令行参数并且仍然具有未加引号的值,则必须在调用 flag.Parse() 后使用 strconv.Unquote() 取消对它们的引号。 ,例如:

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

flag.Parse()
var err error
param, err = strconv.Unquote(`"` + param + `"`)
if err != nil {
panic(err) // handle error
}
// param now contains the unquoted argument value

关于arrays - 获取 Golang 标志作为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36267968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com