我有一個代碼,可以從數據存儲中獲取所有問題: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 關注
- 248 瀏覽
添加回答
舉報
0/150
提交
取消