strconv.Unquote
不应该同时处理单引号和双引号吗?
另见https://golang.org/src/strconv/quote.go - 第350行
但是,以下代码会返回syntax error
:
s, err := strconv.Unquote(`'test'`)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(s)
}
https://play.golang.org/p/TnprqhNdwD1
但双引号按预期工作:
s, err := strconv.Unquote(`"test"`)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(s)
}
我错过了什么?
答案 0 :(得分:3)
标准库中没有现成的功能。
您提出的内容有效,但我们可以使其更简单(也可能更有效):
func trimQuotes(s string) string {
if len(s) >= 2 {
if c := s[len(s)-1]; s[0] == c && (c == '"' || c == '\'') {
return s[1 : len(s)-1]
}
}
return s
}
测试它:
fmt.Println(trimQuotes(`'test'`))
fmt.Println(trimQuotes(`"test"`))
fmt.Println(trimQuotes(`"'test`))
输出(在Go Playground上尝试):
test
test
"'test
答案 1 :(得分:1)
strconv.Unquote
可以正确处理单引号和双引号,但不能以您的代码段调用它的方式使用它。它适用于处理源代码并遇到字符串文字的情况。单引号大小写对单个字符有效,而不是字符串。在go源文件中,如果尝试对多字符字符串文字使用单引号,则会得到类似于illegal rune literal
的编译器错误。
如果要从字符串的开头和结尾删除引号,您可以使用strings.Trim
函数来处理它。
s := strings.Trim(`'test'`, `'"`)
fmt.Println(s)
答案 2 :(得分:-1)
临时解决方法:
d3dx11