Golang中rand.Seed()的 *** 作

Golang中rand.Seed()的 *** 作,第1张

概述记录一下用mac地址+local时间作为seed来产生随机数 package mainimport ( "fmt" "math/rand" "encoding/binary" "time" "net" "reflect" "crypto/md5" "encoding/hex" "strconv" )func

记录一下用mac地址+local时间作为seed来产生随机数

package mainimport (    "fmt"    "math/rand"    "enCoding/binary"    "time"    "net"    "reflect"    "crypto/md5"    "enCoding/hex"    "strconv"    )func getMacAddrs() (macAddrs []string) {    netInterfaces,err := net.Interfaces()    if err != nil {        fmt.Printf("fail to get net interfaces: %v",err)        return macAddrs    }    for _,netInterface := range netInterfaces {        macAddr := netInterface.HarDWareAddr.String()        if len(macAddr) == 0 {            continue        }        macAddrs = append(macAddrs,macAddr)    }    return macAddrs}func GetMD5Hash(text string) string {    hasher := md5.New()    hasher.Write([]byte(text))    return hex.EncodetoString(hasher.Sum(nil))}func main(){        // mac address    mac_adr := getMacAddrs()    fmt.Printf("mac addrs: %q\n",mac_adr)  //[]string    hs_mac := GetMD5Hash(mac_adr[0])    fmt.Printf("hs_mac:%s\n",hs_mac) // string    fmt.Println("hs_mac_type:",reflect.TypeOf(hs_mac))    // 取前16位转换成int64    newmac,err := strconv.ParseInt(hs_mac[:16],16,64)    if err != nil {        panic(err)        fmt.Println("errr")    }    fmt.Printf("Hello,%v with type %s!\n",newmac,reflect.TypeOf(newmac))    i := 0    for i < 3{                            // time (int64)        t := time.Now().UnixNano() // int64        fmt.Println("t:",t)        fmt.Println("t_type:",reflect.TypeOf(t))        var seed int64         seed += t        seed += newmac        fmt.Println("seed:",seed)        rnd := make([]byte,4)                // //UnixNano返回的是int64        //rand.Seed(time.Now().UnixNano())        rand.Seed(seed)        // //fand.Uint32()实现返回一个0-2^32范围内的伪随机数.        binary.littleEndian.PutUint32(rnd,rand.Uint32())         fmt.Println("\nrnd:",rnd,"type:",reflect.TypeOf(rnd))                 i++    }}

输出

mac addrs: ["d8:9e:f3:95:25:eb" "fc:01:7c:9e:4c:61"]hs_mac:4365a5df737a58c3d9ac998937dd4f8fhs_mac_type: stringHello,4856470152322635971 with type int64!t: 1545388101345983327t_type: int64seed: 6401858253668619298rnd: [255 141 16 39] type: []uint8t: 1545388101345999732t_type: int64seed: 6401858253668635703rnd: [245 72 11 47] type: []uint8t: 1545388101346013785t_type: int64seed: 6401858253668649756rnd: [142 160 77 138] type: []uint8
总结

以上是内存溢出为你收集整理的Golang中rand.Seed()的 *** 作全部内容,希望文章能够帮你解决Golang中rand.Seed()的 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1269064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存