[go] go 언어에서의 난수 생성 알고리즘
Go 언어에는 math/rand
패키지를 사용하여 난수를 생성할 수 있는 기능이 내장되어 있습니다. 이 패키지는 유사 난수 생성기를 제공하며, 가장 일반적인 linear congruential generator (LCG)
알고리즘을 사용합니다. Go 언어의 rand
패키지는 다음과 같은 기본 요소를 사용하여 난수를 생성합니다.
- Seed: 랜덤 숫자 생성기를 초기화하기 위한 기준 값
- State: 랜덤 숫자 생성기의 내부 상태
- 난수 생성 알고리즘: 내부 상태를 기반으로 난수를 생성
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 현재 시간을 기반으로 시드값을 생성
rand.Seed(time.Now().UnixNano())
// 0 이상 100 미만의 난수 생성
randomNum := rand.Intn(100)
fmt.Println(randomNum)
}
위 예제에서 rand.Seed(time.Now().UnixNano())
는 현재 시간을 이용하여 시드값을 생성하고, rand.Intn(100)
은 0 이상 100 미만의 난수를 생성합니다.
그러나 이러한 기본적인 방법으로 생성된 난수는 보안적으로 안전하지 않을 수 있습니다. 따라서 보안 수준의 높은 난수가 필요한 경우에는 crypto/rand
패키지를 사용하는 것이 좋습니다.
내부적으로 crypto/rand
패키지는 운영 체제의 엔트로피 소스를 사용하여 안전한 난수를 생성합니다.
참고 자료:
위와 같이, Go 언어에서는 math/rand
패키지를 통해 간단한 의사 난수를 생성할 수 있으며, crypto/rand
패키지를 통해 보안적으로 안전한 난수를 생성할 수 있습니다.