shuffle

shuffle

[code]

func Shuffle(source interface{}) {
	valueOf := reflect.ValueOf(source)
	if valueOf.Type().Kind() != reflect.Slice {
		return
	}
	length := valueOf.Len()
	if length < 2 {
		return
	}
	rand.Seed(time.Now().UnixNano())
	swapper := reflect.Swapper(source)
	for i := 0; i < length; i++ {
		j := rand.Intn(length)
		swapper(i, j)
	}
}

[/code]