検索
ホームページバックエンド開発Golanggolangで非反復乱数を生成する方法

golangで非反復乱数を生成する方法

Go の math/rand パッケージは、乱数を生成するための API を提供します。重要な API は次のとおりです:

// 该函数设置随机种子
// 若不调用此函数设置随机种子,则默认的种子值为1,由于随机算法是固定的,
// 如果每次都以1作为随机种子开始产生随机数,则结果都是一样的,因此一般
// 都需要调用此函数来设置随机种子,通常的做法是以当前时间作为随机种子
// 以保证每次随机种子都不同,从而产生的随机数也不通
// 该函数协程安全
func Seed(seed int64)

// 以下函数用来生成相应数据类型的随机数,带n的版本则生成[0,n)的随机数。
// 注意生成的随机数都是非负数
func Float32() float32
func Float64() float64
func Int() int
func Int31() int32  // 注意该函数只返回int32表示范围内的非负数,位数为31,因此该函数叫做Int31
func Int31n(n int32) int32
func Int63() int64
func Int63n(n int64) int64
func Intn(n int) int
func Uint32() uint32
func Uint64() uint64

// 另外,rand包还提供了一个类,接口和上面的大致相同:
type Rand struct {
    // ...
}

// 创建一个以seed为种子的源,注意该源不是协程安全的
func NewSource(seed int64) Source
// 以src为源创建随机对象
func New(src Source) *Rand
// 设置或重置种子,注意该函数不是协程安全的
func (r *Rand) Seed(seed int64)
// 下面的函数和全局版本的函数功能一样
func (r *Rand) Float32() float32
func (r *Rand) Float64() float64
func (r *Rand) Int() int
func (r *Rand) Int31() int32
func (r *Rand) Int31n(n int32) int32
func (r *Rand) Int63() int64
func (r *Rand) Int63n(n int64) int64
func (r *Rand) Intn(n int) int
func (r *Rand) Uint32() uint32
func (r *Rand) Uint64() uint64

乱数を生成するときは、現在時刻をランダム シードとして使用します。タイム パッケージを使用して現在時刻を生成することもできます:

// 返回当前时间
func Now() Time

// 为了将Time类型转换为int64类型以作为随机种子
// 可以使用如下两个函数:

// 返回从1970年1月1日到t的秒数
func (t Time) Unix() int64
// 返回从1970年1月1日到t的纳秒数
func (t Time) UnixNano() int64

例:

package main
import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    //
    // 全局函数
    //
    rand.Seed(time.Now().Unix())

    fmt.Println(rand.Int())       // int随机值,返回值为int
    fmt.Println(rand.Intn(100))   // [0,100)的随机值,返回值为int
    fmt.Println(rand.Int31())     // 31位int随机值,返回值为int32
    fmt.Println(rand.Int31n(100)) // [0,100)的随机值,返回值为int32
    fmt.Println(rand.Float32())   // 32位float随机值,返回值为float32
    fmt.Println(rand.Float64())   // 64位float随机值,返回值为float64

    // 如果要产生负数到正数的随机值,只需要将生成的随机数减去相应数值即可
    fmt.Println(rand.Intn(100) - 50) // [-50, 50)的随机值

    //
    // Rand对象
    //
    r := rand.New(rand.NewSource(time.Now().Unix()))

    fmt.Println(r.Int())       // int随机值,返回值为int
    fmt.Println(r.Intn(100))   // [0,100)的随机值,返回值为int
    fmt.Println(r.Int31())     // 31位int随机值,返回值为int32
    fmt.Println(r.Int31n(100)) // [0,100)的随机值,返回值为int32
    fmt.Println(r.Float32())   // 32位float随机值,返回值为float32
    fmt.Println(r.Float64())   // 64位float随机值,返回值为float64

    // 如果要产生负数到正数的随机值,只需要将生成的随机数减去相应数值即可
    fmt.Println(r.Intn(100) - 50) // [-50, 50)的随机值
}

以上がgolangで非反復乱数を生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何在 Excel 中创建随机数生成器如何在 Excel 中创建随机数生成器Apr 14, 2023 am 09:46 AM

如何使用 RANDBETWEEN 在 Excel 中生成随机数如果要生成特定范围内的随机数,RANDBETWEEN 函数是一种快速简便的方法。这允许您在您选择的任何两个值之间生成随机整数。使用 RANDBETWEEN 在 Excel 中生成随机数:单击您希望出现第一个随机数的单元格。键入=RANDBETWEEN(1,500)将“1”替换为您要生成的最低随机数,将“500”替换为

Java随机数生成性能优化方法Java随机数生成性能优化方法Jun 30, 2023 pm 12:25 PM

如何优化Java开发中的随机数生成性能随机数在计算机科学中有广泛的应用,特别是在密码学、模拟、游戏等领域。在Java开发中,我们常常需要生成随机数来满足各种需求。然而,随机数生成的性能通常是开发者关注的问题之一。本文将探讨如何优化Java开发中的随机数生成性能。使用ThreadLocalRandom类在Java7中引入了ThreadLocalRandom类

深入了解numpy中的随机数生成方法和应用深入了解numpy中的随机数生成方法和应用Jan 03, 2024 am 08:23 AM

探索NumPy生成随机数的方法及应用引言:随机数在计算机科学和统计学中有着广泛的应用,例如模拟实验、数据生成和特征选择等。在Python中,NumPy(NumericalPython)库是一个强大的数值计算库,提供了许多用于生成随机数的函数。本文将对NumPy中的随机数生成方法进行探索,并给出具体的代码示例。一、NumPy的随机数生成函数NumPy提供

使用Go语言文档中的crypto/rand.Read函数生成随机数使用Go语言文档中的crypto/rand.Read函数生成随机数Nov 04, 2023 pm 03:39 PM

使用Go语言生成随机数Go语言是一种现代化、简洁和高效的编程语言,提供了许多内置库,可用于生成随机数。其中,crypto/rand包提供了一系列函数来生成安全的随机数。在本文中,我们将通过使用crypto/rand包中的Read函数来生成随机数。首先,我们需要导入crypto/rand包,并创建一个字节数组来存储随机数。代码示例如下:packagemain

如何使用PHP数组生成随机数和验证码如何使用PHP数组生成随机数和验证码Jul 16, 2023 am 08:31 AM

如何使用PHP数组生成随机数和验证码随机数和验证码在开发网站和应用程序过程中非常常见。PHP提供了各种方法来生成随机数和验证码。本文将介绍如何使用PHP数组生成随机数和验证码,并附带相应的代码示例。一、生成随机数在PHP中,我们可以使用rand()函数来生成随机数。rand()函数需要两个参数,即最小值和最大值。示例代码如下:$min=1;$max=

如何避免在 Golang 中生成重复的随机数?如何避免在 Golang 中生成重复的随机数?Jun 01, 2024 pm 04:46 PM

在Golang中避免生成重复随机数的方法:创建一个新的随机数生成器rand.New(rand.Source)。使用rand.NewSource(time.Now().UnixNano())作为熵源。使用rand.Intn(n)生成随机整数。

如何在 Golang lambda 函数中生成随机数?如何在 Golang lambda 函数中生成随机数?Jun 05, 2024 pm 12:22 PM

在Golambda函数中生成随机数,需要使用math/rand库:导入库并设置种子以确保不同输出。使用rand.Intn(max)生成随机整数(范围[0,max))。使用rand.Float64()生成随机小数(范围[0.0,1.0))。使用rand.ReadStringN(n)生成随机字符串(长度为n)。

使用java的Math.random()函数生成随机数使用java的Math.random()函数生成随机数Jul 24, 2023 am 08:45 AM

使用Java的Math.random()函数生成随机数随机数在计算机编程中是非常常用的概念,可以帮助我们实现各种功能,比如生成随机密码、抽奖、游戏中的随机事件等等。在Java中,我们可以使用Math.random()函数来生成随机数。Math.random()函数是Java标准库中的一个静态方法,它返回一个大于或等于0且小于1的随机double类型数字。通过

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン