chai2010/advanced-go-programming-book

示例代码存在问题

shanghai-Jerry opened this issue · 2 comments

在负载均衡中的洗牌算法中,代码有问题。 示例代码不止这一个存在问题

这里的示例代码写的确实有问题,不过在函数中修改 slice 是会影响原来的 slice 的,这个你可以简单做个实验

package main

import (
	"fmt"
	"math/rand"
)

func shuffle(slice []int) {
	for i := 0; i < len(slice); i++ {
		a := rand.Intn(len(slice))
		b := rand.Intn(len(slice))
		slice[a], slice[b] = slice[b], slice[a]
	}
}

func main() {
	var endpoints = []int{
		1, 2, 3, 4, 5, 6,
	}
	shuffle(endpoints)
	fmt.Println(endpoints)
	shuffle(endpoints)
	fmt.Println(endpoints)
}

这里的示例代码写的确实有问题,不过在函数中修改 slice 是会影响原来的 slice 的,这个你可以简单做个实验

package main

import (
	"fmt"
	"math/rand"
)

func shuffle(slice []int) {
	for i := 0; i < len(slice); i++ {
		a := rand.Intn(len(slice))
		b := rand.Intn(len(slice))
		slice[a], slice[b] = slice[b], slice[a]
	}
}

func main() {
	var endpoints = []int{
		1, 2, 3, 4, 5, 6,
	}
	shuffle(endpoints)
	fmt.Println(endpoints)
	shuffle(endpoints)
	fmt.Println(endpoints)
}

是的