Go에서 임의의 숫자를 생성하는 방법
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
math/rand
패키지는 Go에서 유사 난수 생성을 제공합니다.time.Now().UnixNano()
를 사용하여 시드하면 실행마다 다른 시퀀스를 보장합니다.math/rand
대신 암호화 난수에는crypto/rand
를 사용하십시오.
난수는 시뮬레이션, 게임 및 보안 프로토콜과 같은 다양한 프로그래밍 시나리오에서 필수적입니다. Go에서 math/rand
패키지는 유사 난수를 생성하는 기능을 제공합니다. 이 기사에서는 이 패키지를 효과적으로 활용하는 방법을 살펴봅니다.
math/rand
패키지 가져오기
시작하려면 필요한 패키지를 가져옵니다.
import ( "fmt" "math/rand" "time" )
정수 값 생성
rand.Intn
함수는 [0, n)
범위에서 음수가 아닌 유사 난수 정수를 반환합니다. 예를 들어:
fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println()
이 코드는 0에서 99 사이의 임의의 정수 두 개를 생성합니다.
부동 소수점 값 생성
부동 소수점 숫자의 경우 rand.Float64
는 [0.0, 1.0)
범위에서 유사 난수를 생성합니다.
fmt.Println(rand.Float64())
특정 범위 내에서 부동 소수점 숫자를 생성하려면 그에 따라 출력을 조정합니다.
fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() * 5) + 5) fmt.Println()
이 스니펫은 [5.0, 10.0)
범위의 숫자를 생성합니다.
난수 생성기 시드
기본적으로 Go의 난수 생성기는 결정적 시드를 사용하기 때문에 프로그램이 실행될 때마다 동일한 숫자 시퀀스를 생성합니다. 실행마다 다른 시퀀스를 보장하려면 현재 시간을 사용하여 고유한 시드를 제공합니다.
s1 := rand.NewSource(time.Now().UnixNano()) r1 := rand.New(s1)
이제 r1
을 사용하면 각 실행에서 다른 시퀀스가 생성됩니다.
fmt.Print(r1.Intn(100), ",") fmt.Print(r1.Intn(100)) fmt.Println()
고정 시드로 시퀀스 재현
테스트 또는 디버깅 목적으로 동일한 난수 시퀀스를 재현할 수 있습니다. 이는 고정 시드를 사용하여 달성할 수 있습니다.
s2 := rand.NewSource(42) r2 := rand.New(s2) fmt.Print(r2.Intn(100), ",") fmt.Print(r2.Intn(100)) fmt.Println()
동일한 시드 값(예: 42
)을 사용하면 r2
가 프로그램을 실행할 때마다 동일한 시퀀스를 생성합니다.
암호화 사용에 대한 참고 사항
math/rand
패키지는 일반적인 용도에 적합하지만 암호화 애플리케이션에는 적합하지 않습니다. 암호화 난수의 경우 안전한 임의 데이터를 생성하는 rand.Read
와 같은 기능을 제공하는 crypto/rand
패키지를 사용하는 것이 좋습니다.
결론
Go의 math/rand
패키지는 유사 난수를 생성하는 간단한 방법을 제공합니다. 생성기에 시드를 설정하고 원하는 범위 내에서 숫자를 생성하는 방법을 이해하면 개발자는 난수를 애플리케이션에 효과적으로 통합할 수 있습니다. 자세한 내용과 예제는 Go by Example: Random Numbers 페이지를 참조하십시오.
FAQs
결정적 시드를 사용하기 때문입니다. time.Now().UnixNano()
를 사용하여 무작위화하십시오.
(rand.Float64() * 5) + 5
를 사용하여 출력을 조정합니다.
암호 생성과 같은 보안에 민감한 애플리케이션에는 crypto/rand
를 사용하십시오.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금이 없습니다.
최고의 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 쉬운 고 동시성 처리를 위한 자동 확장.
- 제로 운영 오버헤드 — 빌드에만 집중하십시오.
자세한 내용은 설명서에서 확인하십시오!
X에서 팔로우하세요: @LeapcellHQ