> 백엔드 개발 > Golang > Golang에서 중복 난수 생성을 방지하는 방법은 무엇입니까?

Golang에서 중복 난수 생성을 방지하는 방법은 무엇입니까?

WBOY
풀어 주다: 2024-06-01 16:46:01
원래의
447명이 탐색했습니다.

Golang에서 중복 난수 생성을 방지하는 방법: 새로운 난수 생성기 rand.New(rand.Source)를 만듭니다. 엔트로피 소스로 rand.NewSource(time.Now().UnixNano())를 사용합니다. 임의의 정수를 생성하려면 rand.Intn(n)을 사용하십시오.

如何避免在 Golang 中生成重复的随机数?

Golang에서 반복되는 난수 생성을 방지하는 방법은 무엇입니까?

Golang에서 난수를 생성하려면 math/rand 패키지를 사용해야 합니다. rand.Intn(n) 함수를 사용하여 [0, n-1] 범위에서 임의의 정수를 생성합니다. 여기서 n은 양의 정수입니다. 그러나 rand.Intn(n)은 동시 환경에서 반복되는 난수를 생성할 수 있습니다. math/rand 包。使用 rand.Intn(n) 函数可以生成一个在 [0, n-1] 范围内的随机整数,其中 n 是一个正整数。但是,rand.Intn(n) 在并发环境下可能会生成重复的随机数。

要解决这个问题,可以使用 rand.New(rand.Source) 函数创建一个新的随机数生成器,并使用 io.Reader 作为熵源。在大多数情况下,使用 rand.NewSource(time.Now().UnixNano()) 作为熵源即可。

以下是一个示例代码,展示了如何使用 rand.NewSource 避免生成重复的随机数:

package main

import (
    "math/rand"
    "time"
)

func main() {
    // 创建一个新的随机数生成器,并使用时间戳作为熵源
    r := rand.New(rand.NewSource(time.Now().UnixNano()))

    // 生成 10 个随机整数
    for i := 0; i < 10; i++ {
        result := r.Intn(100)
        println(result)
    }
}
로그인 후 복사

通过使用 rand.NewSourcetime.Now().UnixNano()

이 문제를 해결하려면 rand.New(rand.Source) 함수를 사용하여 새로운 난수 생성기를 만들고 io.Reader를 엔트로피 소스로 사용할 수 있습니다. . 대부분의 경우 rand.NewSource(time.Now().UnixNano())를 엔트로피 소스로 사용하면 충분합니다. 🎜🎜다음은 중복 난수 생성을 방지하기 위해 rand.NewSource를 사용하는 방법을 보여주는 샘플 코드입니다. 🎜rrreee🎜rand.NewSourcetime을 사용합니다. Now().UnixNano()는 고유하고 예측할 수 없는 난수를 생성하는 엔트로피 소스 역할을 합니다. 🎜

위 내용은 Golang에서 중복 난수 생성을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿