[go] go 언어에서의 난수 생성 알고리즘

Go 언어에는 math/rand 패키지를 사용하여 난수를 생성할 수 있는 기능이 내장되어 있습니다. 이 패키지는 유사 난수 생성기를 제공하며, 가장 일반적인 linear congruential generator (LCG) 알고리즘을 사용합니다. Go 언어의 rand 패키지는 다음과 같은 기본 요소를 사용하여 난수를 생성합니다.

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 패키지를 통해 보안적으로 안전한 난수를 생성할 수 있습니다.