在 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:])
我在接收来自 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:])