Random Numbers

Random Numbers->난수 #

// Go의 `math/rand` 패키지는 [난수(pseudorandom number)](http://en.wikipedia.org/wiki/Pseudorandom_number_generator) 생성을 제공합니다.

package main

import "time"
import "fmt"
import "math/rand"

func main() {

	// 예를 들어, `rand.Intn`은 `0 <= n < 100` 사이의 랜덤 `int`형 n을 반환합니다.
	fmt.Print(rand.Intn(100), ",")
	fmt.Print(rand.Intn(100))
	fmt.Println()

	// `rand.Float64`는 `0.0 <= f < 1.0`의 `float64`형 `f`를 반환합니다.
	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`](http://golang.org/pkg/math/rand/) 패키지 문서를 참조하세요.