从 Golang 中的字符串中删除反斜杠

问题描述 投票:0回答:1

我有一个 JSON 文件,其中包含我需要用来发出 GET 请求的公式。
JSON 中的公式如下所示:

@100-rate(node_cpu_seconds_total{job=\"linux-server-1\",mode=\"idle\",cpu=\"0\"}[1m]) * 100

我需要从公式中删除反斜杠才能发出 GET 请求。
这是我尝试的方法:

tag := `@100-rate(node_cpu_seconds_total{job=\"linux-server-1\",mode=\"idle\",cpu=\"0\"}[1m]) * 100`
formula := strings.Trim(tag, "@")
formula = strings.ReplaceAll(formula, "\\", "")

formulaQuery := "http://%s/api/v1/query?query=%s"

url := fmt.Sprintf(formulaQuery, "host:port", formula)
resp, err := http.Get(url)
    if err != nil {
        fmt.Println("error get-request: ", err)
    }
// parse response

问题是我得到了 400 状态代码,因为反斜杠仍在公式中。不过,如果我打印公式,输出不包含任何反斜杠:

100-rate(node_cpu_seconds_total{job="linux-server-1",mode="idle",cpu="0"}[1m]) * 100

这是服务器的答案:

"error when executing query=\"100-rate(node_cpu_seconds_total{job=\\\\\\\"linux-server-1\\\\\\\",mode=\\\\\\\"idle\\\\\\\",cpu=\\\\\\\"0\\\\\\\"}[1m]) * 100\" for (time=1712043823460, step=300000): labelFilters: unexpected token \"-\"; want \",\", \"or\", \"}\"; unparsed data: \"-server-1\\\\\\\",mode=\\\\\\\"idle\\\\\\\",cpu=\\\\\\\"0\\\\\\\"}[1m]) * 100\""

那么如何使公式有效并删除反斜杠呢?如果公式不包含反斜杠,我发送 get-request 的远程服务器将使用 200 状态代码进行应答。

go
1个回答
0
投票

我的解决方案是:

tag := `@100-rate(node_cpu_seconds_total{job=\"linux-server-1\",mode=\"idle\",cpu=\"0\"}[1m]) * 100`
formula := strings.Trim(tag, "@")

formula = url.QueryEscape(formula)

formulaQuery := "http://%s/api/v1/query?query=%s"

url := fmt.Sprintf(formulaQuery, "host:port", formula)
resp, err := http.Get(url)
    if err != nil {
        fmt.Println("error get-request: ", err)
    }
// parse response

以这种方式发送请求后,服务器会回复200状态码。

© www.soinside.com 2019 - 2024. All rights reserved.