In src/math/rand/rand.go, there is the following code:
func (r *Rand) Perm(n int) []int {
m := make([]int, n)
for i := 0; i < n; i++ {
j := r.Intn(i + 1)
m[i] = m[j]
m[j] = i
}
return m
}
i can start from 1 instead of 0 since the iteration for i=0 always swap m[0] with m[0]. A fix is to change i := 0 to i := 1.