我是靠谱客的博主 想人陪秀发,最近开发中收集的这篇文章主要介绍Golang中mac地址+时间戳加入rand.Seed()产生随机数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

记录一下用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()产生随机数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部