概述
记录一下用mac地址+local时间作为seed来产生随机数
// 首先记录一下rand.Seed()怎么用 // 官方说明,传入int64数据为Seed func (r *Rand) Seed(seed int64) // Seed uses the provided seed value to initialize the generator to a deterministic state. // Seed使用提供的seed值将发生器初始化为确定性状态。 导致每次rand出来的都是一样的,所以至少我要加入时间戳为随机数种子
// 获取时间戳函数使用示例 t1 := time.Now().Unix() // 单位s,打印结果:1491888244 t2 := time.Now().UnixNano() // 单位纳秒,打印结果: // output 精度的差别 1491888244752784461 type:int64
完整代码:
package main import ( "fmt" "net" "time" "hash/fnv" ) /* 加密 encryption */ // net func GetMacAddrs()(string,error){ netInterfaces, err := net.Interfaces() if err != nil { return "",err } for _, netInterface := range netInterfaces { macAddr := netInterface.HardwareAddr.String() if len(macAddr) == 0 { continue } return macAddr,nil } return "",err } // hash output uint32 func Hash(s string) uint32{ h := fnv.New32a() h.Write([]byte(s)) return h.Sum32() } // add mac and time.now() as seed func Hashseed() int64{ mac_adr, _ := GetMacAddrs() t := time.Now().UnixNano() // int64 return int64(Hash(fmt.Sprintf("%d %s",t,mac_adr))) } func main(){ rand.Seed(Hashseed()) rnd := make([]byte,4) binary.LittleEndian.PutUint32(rnd, rand.Uint32()) fmt.Println(rnd) }
转载于:https://www.cnblogs.com/kumata/p/10157409.html
最后
以上就是想人陪秀发为你收集整理的Golang中mac地址+时间戳加入rand.Seed()产生随机数的全部内容,希望文章能够帮你解决Golang中mac地址+时间戳加入rand.Seed()产生随机数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复