在 Golang 中删除周围的双引号或单引号

Vin*_*met 0 string go

不应该同时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)
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/TnprqhNdwD1

但双引号按预期工作:

s, err := strconv.Unquote(`"test"`)
if err != nil {
  fmt.Println(err)
} else {
  fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

icz*_*cza 5

标准库中没有您想要的功能。

您展示的内容有效,但我们可以使其更简单(并且可能更高效):

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
}
Run Code Online (Sandbox Code Playgroud)

测试它:

fmt.Println(trimQuotes(`'test'`))
fmt.Println(trimQuotes(`"test"`))
fmt.Println(trimQuotes(`"'test`))
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

test
test
"'test
Run Code Online (Sandbox Code Playgroud)