Copyright 2018 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
Package detrand provides deterministically random functionality. The pseudo-randomness of these functions is seeded by the program binary itself and guarantees that the output does not change within a program, while ensuring that the output is unstable across different builds.
package detrand

import (
	
	
	
)
Disable disables detrand such that all functions returns the zero value. This function is not concurrent-safe and must be called during program init.
func () {
	randSeed = 0
}
Bool returns a deterministically random boolean.
func () bool {
	return randSeed%2 == 1
}
randSeed is a best-effort at an approximate hash of the Go binary.
Open the Go binary.
	,  := os.Executable()
	if  != nil {
		return 0
	}
	,  := os.Open()
	if  != nil {
		return 0
	}
	defer .Close()
Hash the size and several samples of the Go binary.
	const  = 8
	var  [64]byte
	 := fnv.New64()
	,  := .Stat()
	if  != nil {
		return 0
	}
	binary.LittleEndian.PutUint64([:8], uint64(.Size()))
	.Write([:8])
	for  := int64(0);  < ; ++ {
		if ,  := .ReadAt([:], *.Size()/);  != nil {
			return 0
		}
		.Write([:])
	}
	return .Sum64()