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