Golang 随机数几例

Golang 随机数几例

package main

import (
    "io/ioutil"
    "log"
    "os"
    "strings"
    "time"
    // "reflect"
    "math/rand"
)

var (
    f   *os.FileInfo
    err error

    fnames []string

    first   = "./firstName.dat" // first name dict 姓氏字典
    gender  = ""                // gender 性别
    namenum = 2                 // name character count 名字个数
    bdict   = "bdict.dta"       // boy's name dict 男名字典
    gdict   = "gdict.dat"       // girl's name dict 女名字典
    mdict   = "mdict.dat"       // 中性用名
)

/**
 * 检查文件是否存在
 */
func fileExist() (err error) {
    // 文件不存在则返回error
    fileInfo, err := os.Stat(first)
    if err != nil {
        if os.IsNotExist(err) {
            log.Println(fileInfo)
        }
    }

    data, err := ioutil.ReadFile(first)
    if err != nil {
        log.Fatal(err)
    }

    fnames = strings.Split(string(data), ",")

    return err
}

func privateCheck() {
    // 这个例子测试写权限,如果没有写权限则返回error。
    // 注意文件不存在也会返回error,需要检查error的信息来获取到底是哪个错误导致。
    file, err := os.OpenFile(first, os.O_WRONLY, 0666)
    if err != nil {
        if os.IsPermission(err) {
            log.Println("Error: Write permission denied.")
        }
    }
    file.Close()
    // 测试读权限
    file, err = os.OpenFile(first, os.O_RDONLY, 0666)
    if err != nil {
        if os.IsPermission(err) {
            log.Println("Error: Read permission denied.")
        }
    }
    file.Close()
}

/**
 * 主入口函数
 */
func main() {

    fileExist()

    privateCheck()
    for index := 0; index < 3; index++ {
        generatorName()
    }

    randTest02()
}

/**
 *生成随机姓氏
 */
func generatorName() {

    rand := rand.New(rand.NewSource(time.Now().UnixNano()))

    fl := float64(len(fnames))
    for i := 0; i < 10; i++ {
        rand := int((rand.Float64() * fl)) - 1
        log.Println(rand)
    }

    // fl := float64(len(fnames))
    // rand := int((rand.Float64() * fl))-1

}

func randTest01() {

    for i := 0; i < 10; i++ {
        rand := rand.New(rand.NewSource(time.Now().UnixNano()))
        fl := len(fnames)
        res := rand.Intn(fl)
        log.Println(fnames[res])
    }
}

func randTest02() {

    seed := rand.NewSource(time.Now().Unix())
    randIndex := rand.New(seed)
    for i := 0; i < 10; i++ {
        rand := randIndex.Intn(len(fnames))
        log.Println(fnames[rand])
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注