在 Golang 中,从 int64 到 string 再到 slice 的转换不起作用

In Golang, transformation from int64 to string and then slice doesn't work

我在接收来自 API 的 gzip 响应的客户端上有此代码:

client := &http.Client{}
response, _ := client.Do(r)

// Check that the server actual sent compressed data
var reader io.ReadCloser
switch response.Header.Get("Content-Encoding") {
case "gzip":
    reader, err := gzip.NewReader(response.Body)
    if err != nil {
        log.Fatal(err)
    }
    defer reader.Close()
default:
    reader = response.Body
}

token, err := io.Copy(os.Stdout, reader)
if err != nil {
    log.Fatal(err)
}

cadenita := strconv.FormatInt(token, 10)

fmt.Println(cadenita)

cadena := "code=b2cc1793-cb7a-ea8d-3c82-766557"
fmt.Println(cadena[5:])

此代码显示:

但是,如果我直接在cadenita上使用[5:],虽然它也是一个字符串,但我有这个错误。

我希望能够对转换为字符串的令牌 (int64) 进行切片和正则表达式。我该怎么做?

io.Copy returns 复制的字节数,这就是你的令牌变量中的值,所以在你的例子中是 40 左右的某个地方。 FormatInt 将其转换为只有 2 个字符的字符串“40”,因此当您请求从“40”的第 5 个字符开始的子字符串时,它会出错。

您是否尝试获取令牌中的实际响应数据?如果是这样,您需要将其复制到缓冲区中,例如

buff := bytes.Buffer{}
_, err := io.Copy(&buff, reader)
if err != nil {
    log.Fatal(err)
}
fmt.Println(buff.String()[5:])