Go by Example: 난수

Go의 math/rand 패키지는 난수(pseudorandom number) 생성을 제공합니다.

package main
import "time"
import "fmt"
import "math/rand"
func main() {

예를 들어, rand.Intn0 <= n < 100 사이의 랜덤 int형 n을 반환합니다.

	fmt.Print(rand.Intn(100), ",")
	fmt.Print(rand.Intn(100))
	fmt.Println()

rand.Float640.0 <= f < 1.0float64f를 반환합니다.

	fmt.Println(rand.Float64())

다음은 다른 범위, 예를 들면 5.0 <= f < 10.0의 랜덤 실수값을 생성하는데 사용할 수 있습니다.

	fmt.Print((rand.Float64()*5)+5, ",")
	fmt.Print((rand.Float64() * 5) + 5)
	fmt.Println()

기본 숫자 생성기는 결정적이기 때문에, 기본적으로 매번 동일한 순서의 시퀀스를 생성합니다. 다양한 시퀀스를 생성하기 위해선, 변화하는 시드값을 주어야합니다. 참고로 이는 비밀로 하려는 랜덤수를 생성하는데에는 안전하지 않으며, 이럴땐 crypto/rand를 사용하세요.

	s1 := rand.NewSource(time.Now().UnixNano())
	r1 := rand.New(s1)

rand 패키지의 함수와 마찬가지로 rand.Rand에서 호출합니다.

	fmt.Print(r1.Intn(100), ",")
	fmt.Print(r1.Intn(100))
	fmt.Println()

동일한 숫자의 소스를 시드값으로 하면, 동일한 시퀀스의 랜덤값이 생성됩니다.

	s2 := rand.NewSource(42)
	r2 := rand.New(s2)
	fmt.Print(r2.Intn(100), ",")
	fmt.Print(r2.Intn(100))
	fmt.Println()
	s3 := rand.NewSource(42)
	r3 := rand.New(s3)
	fmt.Print(r3.Intn(100), ",")
	fmt.Print(r3.Intn(100))
}
$ go run random-numbers.go
81,87
0.6645600532184904
7.123187485356329,8.434115364335547
0,28
5,87
5,87

Go가 제공하는 다른 랜덤에 대한 참고 자료는 math/rand 패키지 문서를 참조하세요.

다음 예제: 숫자 파싱.