GO 使用时间作为种子生成随机数

原始代码:

package main
/*
@Time : 2020/3/5
@Author : Max
@File : Go随机输出字符
@Software: GoLand
*/
import (
    "fmt"
    "math/rand"
    "net"
    "time"
)
var defaultLetters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

func RandomString(n int, allowedChars ...[]rune) string {
    var letters []rune

    if len(allowedChars) == 0 {
        letters = defaultLetters
    } else {
        letters = allowedChars[0]
    }
    
    b := make([]rune, n)
    for i := range b {
        b[i] = letters[rand.Intn(len(letters))]
    }

    return string(b)
}
func main() {
    domain :=RandomString(2)+".baidu.com"
    fmt.Println(domain)
        if cname, err := net.LookupIP(domain); err != nil {
            fmt.Println("no")
        } else {
            fmt.Printf("{CMAME:%s %s}\n", domain, cname)
        }
    }


以上代码虽然是随机输出两位字符但是只要你在一个机器上输出每次输出都是固定的两位数字符。
这样的效果显然不是我们需要的,下面我们来想想办法如何进行修改。
首先查询了资料,知道了,设置时间种子使用time包即可达到效果。
下面是示例代码:

package main
/*
@Time : 2020/3/5
@Author : Max
@File : Go随机输出字符
@Software: GoLand
*/
import (
    "fmt"
    "math/rand"
    "net"
    "time"
)
var defaultLetters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

func RandomString(n int, allowedChars ...[]rune) string {
    var letters []rune

    if len(allowedChars) == 0 {
        letters = defaultLetters
    } else {
        letters = allowedChars[0]
    }
    rand.Seed(time.Now().Unix()) //关键代码使用时间作为种子生成随机数
    b := make([]rune, n)
    for i := range b {
        b[i] = letters[rand.Intn(len(letters))]
    }

    return string(b)
}
func main() {
    domain :=RandomString(2)+".baidu.com"
    fmt.Println(domain)
        if cname, err := net.LookupIP(domain); err != nil {
            fmt.Println("no")
        } else {
            fmt.Printf("{CMAME:%s %s}\n", domain, cname)
        }
    }
上一篇:字符串-《go语言底层原理剖析》读书笔记


下一篇:Go切片和string