【go从零单排】Random Numbers、Number Parsing

🌈Don't worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

这里是引用

💻代码

Random Numbers

go 复制代码
package main

import (
	"fmt"
	"math/rand/v2" //math/rand/v2:用于生成随机数。注意这里使用的是 rand 包的版本 2。
)

func main() {
	//rand.IntN(100) 生成一个 0 到 99 之间的随机整数。调用两次以生成两个随机整数,并用逗号分隔打印。
	fmt.Print(rand.IntN(100), ",")
	fmt.Print(rand.IntN(100))
	fmt.Println()
	//rand.Float64() 生成一个 0.0 到 1.0 之间的随机浮点数,并打印。
	fmt.Println(rand.Float64())
	//通过 rand.Float64()*5 生成一个 0.0 到 5.0 之间的随机浮点数,再加上 5,使结果范围变为 5.0 到 10.0。
	//调用两次以生成两个随机浮点数,并用逗号分隔打印。
	fmt.Print((rand.Float64()*5)+5, ",")
	fmt.Print((rand.Float64() * 5) + 5)
	fmt.Println()
	//rand.NewPCG(42, 1024) 创建一个新的 PCG(Permuted Congruential Generator)随机数生成器,使用种子值 42 和状态值 1024。
	s2 := rand.NewPCG(42, 1024)
	//rand.New(s2) 使用这个生成器创建一个新的随机数生成器实例 r2。
	r2 := rand.New(s2)
	//通过 r2.IntN(100) 生成两个 0 到 99 之间的随机整数,并用逗号分隔打印。
	fmt.Print(r2.IntN(100), ",")
	fmt.Print(r2.IntN(100))
	fmt.Println()
	//再次创建一个 PCG 随机数生成器,使用相同的种子和状态值,生成器实例为 r3。
	s3 := rand.NewPCG(42, 1024)
	//通过 r3.IntN(100) 生成两个 0 到 99 之间的随机整数,并用逗号分隔打印。
	r3 := rand.New(s3)
	fmt.Print(r3.IntN(100), ",")
	fmt.Print(r3.IntN(100))
	fmt.Println()
}

//输出
//48,89
//0.7365009847357684
//7.945666205049617,7.769640472616085
//94,49
//94,49

Number Parsing

c 复制代码
package main

import (
	"fmt"
	"strconv" //strconv:用于字符串与基本数据类型之间的转换。
)

func main() {
	//strconv.ParseFloat("1.234", 64) 将字符串 "1.234" 转换为 64 位浮点数(float64),结果赋值给 f。
	f, _ := strconv.ParseFloat("1.234", 64)
	fmt.Println(f)
	//strconv.ParseInt("123", 0, 64) 将字符串 "123" 转换为 64 位整数(int64)。
	//第二个参数 0 表示根据字符串的前缀自动推断进制(例如,0x 表示十六进制,0 表示十进制)。
	i, _ := strconv.ParseInt("123", 0, 64)
	fmt.Println(i)
	//strconv.ParseInt("0x1c8", 0, 64) 将字符串 "0x1c8" 转换为整数,0x1c8 是十六进制数,等于十进制的 456。
	d, _ := strconv.ParseInt("0x1c8", 0, 64)
	fmt.Println(d)
	//strconv.ParseUint("789", 0, 64) 将字符串 "789" 转换为 64 位无符号整数(uint64)
	u, _ := strconv.ParseUint("789", 0, 64)
	fmt.Println(u)
	//strconv.Atoi("135") 是 strconv.ParseInt 的简化版本,直接将字符串 "135" 转换为整数(int)。
	k, _ := strconv.Atoi("135")
	fmt.Println(k)
	//strconv.Atoi("wat") 尝试将字符串 "wat" 转换为整数,由于 "wat" 不是有效的数字,转换会失败。
	_, e := strconv.Atoi("wat")
	fmt.Println(e)
}
//输出
//1.234
//123
//456
//789
//135
//strconv.Atoi: parsing "wat": invalid syntax

🔍理解

  • 随机数的可重复性:使用相同的种子会生成相同的随机数序列,这在调试时很有用。
  • 种子选择:在生产环境中,通常会使用当前时间或其他变化的值作为种子,以生成不可预测的随机数序列。
  • 错误处理:在实际应用中,建议对每个转换操作的错误进行处理,避- 免程序因未处理的错误而崩溃。
  • 进制选择:在转换整数时,确保理解进制的选择,尤其是使用 0 作为进制参数时。
  • 浮点数精度:注意浮点数的精度问题,特别是在进行数学运算时。

💡 Tips小知识点

  • 创建自定义的随机数生成器(使用 PCG 算法),并使用相同的种子和状态值生成随机数。使用相同的种子和状态值,r2 和 r3 生成的随机数序列是确定的,因此可以预测这些随机数的值。

💪无人扶我青云志,我自踏雪至山巅。

相关推荐
caoerzhong3 分钟前
跨境海外仓怎么管:JeeWMS 开源 Java 仓库管理系统打通头程、海外仓与尾程
java·开发语言·开源
茶栀(*´I`*)7 分钟前
【Python数据分析利器】Pandas从入门到实战:核心数据结构DataFrame与Series全解析
python·数据分析·pandas
码云数智-大飞9 分钟前
新手写 Python 代码,如何规范命名、减少 Bug
开发语言·python·php
天天被压力18 分钟前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #06】Python实时行情总报错?五档盘口+逐笔一次跑通
java·人工智能·python
智能RPA19 分钟前
农业与矿业行业智能体自动化平台对比评测(计量与巡检场景)
运维·人工智能·python·自动化·agent·rpa
福兮说22 分钟前
JS 正则的六个坑:带 g 的 test() 一真一假、空匹配死循环、replace 里的 $
开发语言·前端·javascript·正则表达式
溪语流沙25 分钟前
Django + Vue电商项目第005讲:后端骨架|Django初始化、配置分层与DRF接入
vue.js·后端·python·django
码艺-Alimjan27 分钟前
Web 网站打包桌面应用的另一种方式,超级简单(C# exe 33Kb)
开发语言·前端·c#
代码方舟27 分钟前
Python数据工程:利用天远全能消金报告优化消费金融合规体验
人工智能·python
沫璃染墨28 分钟前
《从零入门Linux系统篇(五十一):线程篇·四——pthread线程库详解:从线程创建到终止与分离》
linux·运维·服务器·开发语言·c++·系统架构·线程