如何从golang的数组中提取字符?
need to extract the random characters from string
here is what i got:
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, 1)
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
fmt.Println(string(b))
but it always returns "X" but, i need to return every time new character using rand function. any help would be really appreciated. Thanks.
需要从字符串中提取随机字符 p>
这是我得到的 : p>
const letterBytes =“ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
b:= make([] byte,1)
for i:=范围b {
b [i] = letterBytes [rand .Intn(len(letterBytes))
}
fmt.Println(string(b))
code> pre>
,但它始终返回“ X”
但是,我 需要每次使用rand函数返回新字符。
any的帮助将不胜感激。
谢谢。 p>
div>
Start by seeding the pseudorandom number generator. For example,
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))
}
Output:
jfXtySC
About the Playground
In the playground the time begins at 2009-11-10 23:00:00 UTC (determining the significance of this date is an exercise for the reader). This makes it easier to cache programs by giving them deterministic output.
Therefore, in the Go playground, time.Now().UnixNano()
always returns the same value. For a random seed value, run the code on your computer.
For any Unicode code point (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))
}
Output:
世QRYSp=@giJMIKly=tXRefjtVkeE!yHhTSQHvLyUYdRNIBbILW
You probably don't need cryto/rand. Just set the seed to something different each time. The math/rand package is deterministic with the same seed, so you just need to change the seed each time. Assuming this is not super secure, just add this line.
rand.Seed(time.Now().Unix())
Also note if you're using play.golang.org to test it that's not going to work because the time pkg doesn't work there. It'll work fine anywhere else.
If you actually want a random selection of characters though, use crypto/rand.Read NOT a homemade version - you can encode it if you need it within a given character range. Finally, don't roll your own crypto, just in case that's what you're doing here.