如何从 golang 中的数组中提取字符?



需要从字符串中提取随机字符

这是我得到的:

const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, 1)
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
fmt.Println(string(b))

但它总是返回"X" 但是,每次使用 RAND 函数时,我都需要返回新字符。 任何帮助将不胜感激。 谢谢。

首先为伪随机数生成器设定种子。例如

package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, 7)
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
fmt.Println(string(b))
}

输出:

jfXtySC

围棋游乐场

关于游乐场

在操场上,时间从 2009-11-10 23:00:00 UTC 开始 (确定此日期的重要性是 读者(。这使得通过给程序来更容易缓存程序 确定性输出。

因此,在 Go 操场中,time.Now().UnixNano()始终返回相同的值。对于随机种子值,请在计算机上运行代码。


对于任何 Unicode 代码点(Go rune(,

package main
import (
"fmt"
"math/rand"
"time"
)
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
chars := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ世界!@=")
r := make([]rune, 50)
for i := range r {
r[i] = chars[rand.Intn(len(chars))]
}
fmt.Println(string(r))
}

输出:

世QRYSp=@giJMIKly=tXRefjtVkeE!yHhTSQHvLyUYdRNIBbILW

你可能不需要cryto/rand。只需每次将种子设置为不同的内容即可。math/rand 包具有相同的种子是确定性的,因此您只需每次更改种子即可。假设这不是超级安全,只需添加此行。

rand.Seed(time.Now().Unix())

另请注意,如果您使用 play.golang.org 来测试它,则不会起作用,因为时间 pkg 在那里不起作用。它可以在其他任何地方正常工作。

如果您真的想要随机选择字符,请使用加密/兰特。阅读不是自制版本 - 如果需要,您可以在给定的字符范围内对其进行编码。最后,不要滚动自己的加密货币,以防万一这就是你在这里做的事情。

最新更新