Go 언어 난수 알아보기

오늘은 Go 언어에서 지원하는 난수를 간단한 코드로 출력해보려 합니다.

package main

import (
	crypto "crypto/rand"
	"fmt"
	"math/rand"
	"time"
)

난수를 생성하기 위해 math/rand 패키지를 가져오고, 추가로 보안을 위한 난수도 출력해보기 위헤 crypto의 패키지도 추가돌 가져옵니다.

시간 시드를 사용하기 위해 time 패키지도 가져옵니다.

출력하기 위한 fmt 패키지도 마지막으로 가져옵니다.

func main() {
	fmt.Println(rand.Intn(100))

0부터 100까지의 정수 형태의 난수가 출력됩니다.

	fmt.Println(rand.Float64())

Float64 형태의 난수가 출력됩니다.

	timeSource := rand.NewSource(time.Now().UnixNano())
	random := rand.New(timeSource)
	fmt.Println(random.Intn(100))

매번 바뀌는 시드값으로 주기 위해서 유닉스 시간의 나노초를 시드 값으로 건내줍니다.

건내받은 시드값으로 이루어진 난수를 0부터 100사이로 출력합니다.

	cryptoValue := make([]byte, 1)
	crypto.Read(cryptoValue)
	fmt.Println(cryptoValue[0])

보안을 위해 crypto/rand 패키지로 난수를 생성할 수 있습니다.

다만, 기존의 rand 패키지와 같이 쓰려면 패키지의 별칭으로 작업해야 합니다.

	firstSource := rand.NewSource(2018)
	firstRandom := rand.New(firstSource)
	fmt.Println(firstRandom.Intn(100))

	secondSource := rand.NewSource(2018)
	secondRandom := rand.New(secondSource)
	fmt.Println(secondRandom.Intn(100))
}

같은 시드 값이라면 서로 같은 값이 출력됩니다.

Written on November 22, 2018