我有一个代码,可以从数据存储中获取所有问题:queQ := datastore.NewQuery("Question")questions := make([]questionData, 0) if keys, err := queQ.GetAll(c, &questions); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return }我想一次但随机地显示这些问题。我想在go(server)中而不是在客户端中对问题片进行重新排序。怎么可能扰乱切片的顺序?我曾考虑过生成随机数,但是我认为有一种简单的方法可以做到这一点。非常感谢大家!
2 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
在您的代码中,keys和questions是数据存储区键和值的同步切片。因此,请使用切片索引的随机序列进行访问questions。例如,要随机选择所有键和值片,
package main
import (
"fmt"
"math/rand"
"time"
)
type Key struct{}
type Value interface{}
func main() {
keys := make([]*Key, 5)
values := make([]Value, len(keys))
rand.Seed(time.Now().Unix())
for _, r := range rand.Perm(len(keys)) {
k := keys[r]
v := values[r]
fmt.Println(r, k, v)
}
}
输出:
2 <nil> <nil>
3 <nil> <nil>
4 <nil> <nil>
0 <nil> <nil>
1 <nil> <nil>
该代码已被修改为使用rand.Perm函数。
- 2 回答
- 0 关注
- 220 浏览
添加回答
举报
0/150
提交
取消