您需要某种随机信息,并且根据其值,可以
true在一半的可能情况下返回它,而
false在另一半情况下可以返回。
使用一个非常简单的例子
rand.Float32()中的
math/rand包:
func rand1() bool { return rand.Float32() < 0.5}不要忘记使用以下方法正确math/rand
打包程序包,以使其在每次运行的应用程序中都不同rand.Seed()
:
func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand1())}这是在的doc文件中提到的
math/rand:
如果每次运行需要不同的行为,请使用种子函数初始化默认的源。
如果不设置种子,则每次运行应用程序时都会返回相同的伪随机信息。
一些变化:
func rand2() bool { return rand.Int31()&0x01 == 0}func rand3() bool { return rand.Intn(2) == 0}一个有趣的解决方案,无需使用该
math/rand软件包。它使用以下
select语句:
func rand9() bool { c := make(chan struct{}) close(c) select { case <-c: return true case <-c: return false }}说明:
该
select语句从可以继续进行而不会阻塞的情况中选择一种 随机
情况。由于可以立即进行从封闭渠道的接收,因此将随机选择2种情况之一,返回
true或
false。请注意,但这并不是完全随机的,因为这不是该
select语句的要求。
通道也可以移动到全局变量,因此无需在每次调用中创建一个通道或关闭一个通道:
var c = make(chan struct{})func init() { close(c)}func rand9() bool { select { case <-c: return true case <-c: return false }}


