为了账号安全,请及时绑定邮箱和手机立即绑定

获取 Golang 标志作为字节数组

获取 Golang 标志作为字节数组

Go
胡子哥哥 2021-12-27 17:55:28
我正在使用flag包来读取我传递给 Golang 程序的所有参数。的问题是,如果我传递参数如"\x41BC",它不是读为3字节阵列(字符'A','B'和'C'),但作为一个6字节阵列('\','x','4','1','B','C')。如果回答可能有用,我正在使用以下方法阅读该字符串:flag.StringVar(&param, "param", "", "the param with hex chars")有没有办法避免这种情况?
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

"\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上试试):


\x41BC

ABC

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


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


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信