Go 言語は最新のプログラミング言語であり、その効率性と習得が容易な特徴により、プロジェクトでこの言語を使用する開発者が増えています。 Go 言語では、乱数の使用は非常に一般的な要件であり、Go 言語に付属の暗号化された乱数生成パッケージである crypto/rand の Int 関数は、ランダムな整数を生成する方法を提供します。
この記事では、crypto/rand.Int 関数について詳しく説明し、具体的なコード例を示します。
1. crypto/rand.Int 関数
crypto/rand.Int 関数は、Go 言語の crypto/rand パッケージで提供されるランダムな整数生成関数です。この関数には 2 つのパラメータがあります: 乱数生成のソースを表す入力パラメータ rand、出力乱数整数の全長を表す出力パラメータ limbs。
この関数の関数プロトタイプは次のとおりです。
func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
このうち、rand パラメータは乱数の生成元であり、通常は次の Reader 関数を呼び出すことで取得できます。 crypto/rand パッケージ。 max パラメータは出力ランダム整数の全長を表し、デフォルト値は 1 です。
Go 言語の大きな数値ライブラリ Big を使用して任意の長さの整数を格納できるため、この関数の戻り値の型は *big.Int です。乱数の生成が失敗するかエラーが発生した場合、関数はエラー型のオブジェクトを返します。
2. Int 関数の使用例
次に、読者がこの関数をよりよく理解して使用できるように、2 つの具体的な Int 関数の使用例を示します。
次は、crypto/rand.Int 関数を使用して 1 から 100 までのランダムな整数を生成する実装です。と 100 の間のランダムな整数。
package main import ( "crypto/rand" "fmt" "math/big" ) func main() { max := big.NewInt(100) n, err := rand.Int(rand.Reader, max) if err != nil { fmt.Println("生成随机数失败:", err) return } fmt.Println(n) }
crypto/rand パッケージ内の Reader 関数を呼び出し、それをパラメータとして rand.Int 関数に渡すことで、1 から 100 までの任意の整数を生成できます。エラーが発生した場合は、エラーメッセージを出力することで、コードを修正することができます。
次は、crypto/rand.Int 関数を使用してランダムな文字列を生成する方法を示す、より複雑な例です。指定された長さの文字列。
package main import ( "crypto/rand" "fmt" "math/big" ) const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" func main() { length := 20 max := big.NewInt(int64(len(charset))) data := make([]byte, length) for i := 0; i < length; i++ { n, err := rand.Int(rand.Reader, max) if err != nil { fmt.Println("生成随机数失败:", err) return } index := int(n.Int64()) data[i] = charset[index] } fmt.Println(string(data)) }
上記のコードは、長さ 20 のランダムな文字列を生成します。具体的な手順は次のとおりです:
1. 返された乱数を格納するために、長さ 20 のバイト配列を定義します。
2. 生成される乱数の上限を文字セットの長さに設定して rand.Int 関数を呼び出し、0~len(charset)-1 までの任意の整数を生成します。
3. 生成された乱数を文字セットの添字として使用し、結果をバイト配列に格納します。
4. 最後に、バイト配列を文字列に変換して出力します。
3. 概要
この記事の導入部を通じて、ランダムな整数を生成するのに非常に役立つ、Go 言語の crypto/rand.Int 関数の基本的な使用法について学びました。そして文字列。
また、乱数は完全なランダムではなく、擬似ランダムであることに注意してください。したがって、Int 関数を使用して乱数を生成する場合は、乱数性とセキュリティを確保するために十分なエントロピー ソースが提供されていることを確認することが重要です。
以上がGo言語ドキュメント解釈:crypto/rand.Int関数の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。