Go에서 난수 생성

Sheeraz Gul 2023년6월20일
  1. Go에서 난수 생성
  2. 특정 범위 사이에서 난수 생성
  3. 난수 배열 생성
  4. 난수 생성 전 시드
  5. Rand를 사용하여 임의의 문자열 생성
Go에서 난수 생성

이 튜토리얼은 GoLang에서 난수 생성 기능을 사용하는 방법을 보여줍니다.

Go에서 난수 생성

GoLang은 난수 생성 기능을 기본적으로 지원합니다. 내장 패키지 math에는 난수 생성에 사용되는 rand() 메서드가 있습니다.

math/rand 방법은 의사 난수를 생성합니다. rand() 메서드는 0과 n 사이의 난수를 생성할 수 있습니다.

이 방법의 구문은 다음과 같습니다.

RandomNumber := rand.Intn()

Intn() 메서드는 n의 정수 값을 지정합니다. 예를 들어 보겠습니다.

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    // Generating numbers between `0 <= n < 100`.
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100), "\n")
    fmt.Print(rand.Intn(100))
    fmt.Println()

}

위의 코드는 0에서 100 사이의 난수를 생성합니다. 출력을 참조하십시오.

81
87
47
59
81

특정 범위 사이에서 난수 생성

rand.Intn()은 0과 주어진 숫자 사이의 난수를 생성하지만 지정된 범위 사이의 난수를 생성하려면 어떻게 해야 할까요? 유사한 방법으로 간단한 수학 연산으로 특정 범위 사이의 난수를 생성할 수 있습니다.

예를 참조하십시오.

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    minrange := 20
    maxrange := 45
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange)+minrange, "\n")
    fmt.Println(rand.Intn(maxrange-minrange) + minrange)

}

위의 코드는 20에서 45 사이의 난수를 생성합니다. 출력을 참조하십시오.

26

32

42

29

26

Program exited.

난수 배열 생성

마찬가지로 rand() 메서드를 사용하여 난수 배열을 생성할 수 있습니다. for 루프를 사용하여 숫자를 생성하고 배열에 넣기만 하면 됩니다.

예를 참조하십시오.

package main

import (
    "fmt"
    "math/rand"
)

func RandomArray(ArrayLength int) []int {

    arr := make([]int, ArrayLength)

    for i := 0; i <= ArrayLength-1; i++ {

        arr[i] = rand.Intn(ArrayLength)
    }

    return arr
}

func main() {

    ArrayLength := 15
    fmt.Println(RandomArray(ArrayLength))
}

위의 코드는 길이가 15인 난수 배열을 생성합니다. 출력을 참조하십시오.

[11 12 2 14 1 3 10 5 1 0 14 1 12 14 13]

Program exited.

난수 생성 전 시드

seed() 메소드는 rand() 메소드가 이전 값에 대해 일부 작업을 수행하여 숫자를 생성하기 때문에 난수 생성을 시작할 위치를 지정하는 데 사용됩니다.

이것은 실제 난수에 가까운 시드를 제공하기 위해 난수를 생성하는 가장 중요한 부분입니다. 예를 들어 보겠습니다.

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    rand.Seed(30)
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d ", rand.Intn(150))
    fmt.Printf("%d \n", rand.Intn(150))

    fmt.Println()
}

위의 코드는 동일한 값을 가진 rand 메서드를 세 번 시드합니다. 그런 다음 난수 생성기는 동일한 시드 값을 찾을 때마다 동일한 숫자를 생성합니다.

출력을 참조하십시오.

138 16 41
138 16 41
138 16 41

Program exited.

Rand를 사용하여 임의의 문자열 생성

bytes의 도움으로 rand 방법을 사용하여 임의의 문자열을 생성할 수 있습니다. 또한 특정 범위 사이의 숫자를 생성하는 방법의 도움이 필요합니다.

예를 들어 보겠습니다.

package main

import (
    "fmt"
    "math/rand"
)

func GenerateRandomString(StringLength int) string {

    StringBytes := make([]byte, StringLength)

    for i := 0; i < StringLength; i++ {
        StringBytes[i] = byte(RandNumberinRange(65, 122))
    }

    return string(StringBytes)
}

func RandNumberinRange(minnumber int, maxnumber int) int {

    return minnumber + rand.Intn(maxnumber-minnumber)
}

func main() {
    fmt.Println(GenerateRandomString(25))
}

위의 코드는 대문자, 소문자 및 몇 가지 기호를 포함하는 65에서 122 사이의 ASCII 코드를 사용하여 임의의 문자열을 생성합니다. 길이가 25인 문자열을 생성합니다.

출력을 참조하십시오.

FbpXH\fgTAvxtUxCbvLXXVOle

주어진 문자열이나 요소에서 임의의 문자를 인쇄할 수도 있습니다. 예를 보자:

package main

import (
    "fmt"
    "math/rand"
)

func main() {

    DemoRune := []rune("DELFTSTACK")

    Result := DemoRune[rand.Intn(len(DemoRune))]

    fmt.Println(string(Result))
}

은 유니코드 문자를 나타내는 데 사용되는 코드를 저장하는 데 사용되는 데이터 유형입니다. 위의 코드는 주어진 문자열에서 임의의 문자를 인쇄합니다.

출력을 참조하십시오.

E

Program exited.
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook