Golang中如何解决从go-redis获取的字符串无法转换为int的问题

Golang中如何解决从go-redis获取的字符串无法转换为int的问题 我在Go中使用go-redis从Redis获取列表数据。

IDs, err := redisClient.LRange("ID", 0, -1).Result()
if err != nil {
	panic(err)
}
fmt.Println(IDs)

for _, ID := range IDs {
	id, _ := strconv.Atoi(ID)
    fmt.Println(IDs)
}

第一次打印时,它能获取到正确的数据:

37907

61357

45622

69007

但第二次打印得到的结果全是0:

0

0

0

0

如果不转换为整数,它是字符串类型:

cannot use ID (type string) as type int in argument

所以我需要将它作为整数使用。


我使用一个纯Go列表进行了测试:

var a [4]string
a[0] = "1"
a[1] = "2"
a[2] = "3"
a[3] = "4"
for _, i := range a {
	id, _ := strconv.Atoi(i)
	fmt.Println(id)
}

它可以在没有换行分隔的情况下正常工作:

1
2
3
4

因此,go-redis.LRange("ID", 0, -1).Result()返回的不仅仅是字符串。 https://godoc.org/github.com/go-redis/redis#Client.LRange 它返回的是*StringSliceCmd。那么该如何转换它呢?


更多关于Golang中如何解决从go-redis获取的字符串无法转换为int的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
id, _ := strconv.Atoi(i)

该语句中的第二个 _ 是其返回的错误值。你应该将这一行改为 id, err := strconv.Atoi(i) 并处理这个错误。

更多关于Golang中如何解决从go-redis获取的字符串无法转换为int的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


问题在于从Redis获取的字符串包含换行符。strconv.Atoi()无法解析包含换行符的字符串,导致返回0和错误。

解决方案是清理字符串中的换行符:

IDs, err := redisClient.LRange("ID", 0, -1).Result()
if err != nil {
    panic(err)
}

for _, ID := range IDs {
    // 移除换行符和空格
    cleanedID := strings.TrimSpace(ID)
    
    id, err := strconv.Atoi(cleanedID)
    if err != nil {
        fmt.Printf("转换失败: %v\n", err)
        continue
    }
    fmt.Println(id)
}

或者使用strconv.ParseInt()

for _, ID := range IDs {
    cleanedID := strings.TrimSpace(ID)
    
    id, err := strconv.ParseInt(cleanedID, 10, 64)
    if err != nil {
        fmt.Printf("转换失败: %v\n", err)
        continue
    }
    fmt.Println(id)
}

如果数据包含其他空白字符,可以使用更严格的清理:

import "regexp"

for _, ID := range IDs {
    // 移除非数字字符
    re := regexp.MustCompile(`[^0-9]`)
    cleanedID := re.ReplaceAllString(ID, "")
    
    id, err := strconv.Atoi(cleanedID)
    if err != nil {
        fmt.Printf("转换失败: %v\n", err)
        continue
    }
    fmt.Println(id)
}

检查Redis中存储的实际数据格式:

for i, ID := range IDs {
    fmt.Printf("索引 %d: 原始值=%q, 长度=%d\n", i, ID, len(ID))
    fmt.Printf("十六进制: %x\n", ID)
}

这能帮助确认字符串中是否包含不可见字符。

回到顶部