作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有:"github.com/go-redis/redis"
包,并且我使用它的方法来触发自定义 Redis cmd:https://godoc.org/github.com/go-redis/redis#Client.Do
我最终得到:
result, err := client.Do("MEMORY", "STATS").Result()
结果
如下所示:
<interface {}>
data:<[]interface {}> (length: 52, cap: 52)
[0]:<interface {}>
data:"peak.allocated"
[1]:<interface {}>
data:4957760
[2]:<interface {}>
data:"total.allocated"
[3]:<interface {}>
data:855632
[4]:<interface {}>
//... and so on
基本上,它是一个带有数据属性的接口(interface),在数据中我们有更多的接口(interface)(偶数是键,奇数是值)。
我想输入它,以便获得“total.allocated”的值
。
正确的做法是什么?
最佳答案
这是特定于MEMORY STATS
的redis 命令。其结果是一个数组,“有关内存使用情况的信息以指标及其各自的值的形式提供”。。
由于没有“预定义”类型来对此进行建模,因此只需使用 type-assertion要在 Go 中获取 slice ,请对其进行迭代,然后查找您感兴趣的键:“total.allocated”
。随后的 slice 元素将是您要查找的值。
您可以这样做:
result, err := client.Do("MEMORY", "STATS").Result()
if err != nil {
// Handle error
return
}
if stats, ok := result.([]interface{}); ok {
for i := 0; i < len(stats); i += 2 {
if stats[i] == "total.allocated" && i+1 < len(stats) {
fmt.Println("total allocated memory:", stats[i+1])
}
}
}
如果我们循环直到len-1
(而不是len
),我们就可以简化循环,所以我们不必检查是否i+1
是有效索引:
for i, max := 0, len(stats)-1; i < max; i += 2 {
if stats[i] == "total.allocated" {
fmt.Println("total allocated memory:", stats[i+1])
}
}
总分配内存的值是一个int64
类型的值。如果您需要它作为数字,请使用另一个类型断言:
allocated := stats[i+1].(int64)
或者为了安全起见:
if allocated, ok := stats[i+1].(int64); ok {
// Use allocated
}
关于go - 如何从redis Do()结果中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58389247/
我是一名优秀的程序员,十分优秀!