我在客户端上有这个代码,它接收来自API的gzipped响应:
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)进行切片和正则表达式。我怎么能这样做?
答案 0 :(得分:2)
io.Copy返回复制的字节数,因此这是您的令牌变量中的值,因此您的示例中的区域为40。 FormatInt将其转换为字符串" 40"它只有2个字符,所以当你要求从#34; 40"的第5个字符开始的子字符串时,它会出现错误。
您是否尝试在令牌中获取实际响应数据?如果是这样,你需要将它复制到缓冲区,例如
buff := bytes.Buffer{}
_, err := io.Copy(&buff, reader)
if err != nil {
log.Fatal(err)
}
fmt.Println(buff.String()[5:])