
包 math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗。
a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] })
复制代码
输出:
[5 8 6 4 3 7 2 1]
复制代码
rand.Seed
延伸阅读

Go 1.10 之前
math/rand
a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
for i := len(a) - 1; i > 0; i-- { // Fisher–Yates shuffle
j := rand.Intn(i + 1)
a[i], a[j] = a[j], a[i]
}
复制代码