相关疑难解决方法(0)

Golang随机数生成器如何正确播种

我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码:

package main

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

func main() {
    fmt.Println(randomString(10))
}

func randomString(l int) string {
    var result bytes.Buffer
    var temp string
    for i := 0; i < l; {
        if string(randInt(65, 90)) != temp {
            temp = string(randInt(65, 90))
            result.WriteString(temp)
            i++
        }
    }
    return result.String()
}

func randInt(min int, max int) int {
    rand.Seed(time.Now().UTC().UnixNano())
    return min + rand.Intn(max-min)
}
Run Code Online (Sandbox Code Playgroud)

我的实施很慢.播种使用time在一定时间内带来相同的随机数,因此循环一次又一次地迭代.我该如何改进我的代码?

random go

146
推荐指数
6
解决办法
11万
查看次数

Go中阵列的处理

阅读http://golang.org/doc/effective_go.html#arrays上的以下内容......

  • 数组是值.将一个数组分配给另一个数组会复制所有元素.
  • 特别是,如果将数组传递给函数,它将接收数组的副本,而不是指向它的指针.

......我希望在下面的代码arr2是从不同的arr,和main()arr是从不同shuffle()arr.有人可以解释为什么以下代码洗牌arr2?我知道围棋还是一种年轻的语言; 也许阵列的处理有所改变?

package main

import (
        "fmt"
        "rand"
        "time"
)

func shuffle(arr []int) {
        rand.Seed(time.Nanoseconds())
        for i := len(arr) - 1; i > 0; i-- {
                j := rand.Intn(i)
                arr[i], arr[j] = arr[j], arr[i]
        }
}

func main() {
        arr := []int{1, 2, 3, 4, 5}
        arr2 := arr
        shuffle(arr)
        for _, i := range arr2 {
                fmt.Printf("%d ", i)
        } …
Run Code Online (Sandbox Code Playgroud)

arrays go

5
推荐指数
1
解决办法
2146
查看次数

标签 统计

go ×2

arrays ×1

random ×1