一文了解 Go 标准库 math 和 rand 的常用函数

简介: 本文介绍了标准库 math 和 rand 的常用函数的用法,并通过例子进行说明。math 库里虽说有最大值和最小值比较,但是形参类型必须是浮点型,如果我们想比较的是整型的最大最小值,就得自己封装函数。获取随机数时,不要忘记设置随机种子,否则多次获取到的随机数将会是一样的。

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,本文分享的内容是在 Go 标准库 math 和 rand 的常用函数。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

math 标准库

math 标准库提供了一些 常量如 int64 类型的最大值、float64 类型的最大值等,和常用的数学计算函数。

常用函数

函数 说明
Abs(x float64) float64 传入 x 参数,返回 x 的绝对值
Max(x, y float64) float64 传入 xy 参数,返回 xy 中的最大值
Min(x, y float64) float64 传入 xy 参数,返回 xy 中的最小值
Ceil(x float64) float64 传入 x 参数,返回一个大于等于 x 的最小整数值,也就是向上取整
Ceil(x float64) float64 传入 x 参数,返回一个小于等于 x 的最小整数值,也就是向下取整
Trunc(x float64) float64 传入 x 参数,返回浮点数 x 的整数部分,使用 Floor 函数也能实现
Dim(x, y float64) float64 传入 xy 参数,返回 x-y0 中最大的值
Mod(x, y float64) float64 x / y 进行取余运算 x % y
Pow(x, y float64) float64 计算 xy 次幂
Sqrt(x float64) float64 x 开平方
Cbrt(x float64) float64 x 开立方
Modf(f float64) (int float64, frac float64) 分别取出 f 的整数部分和小数部分

如果想了解更多函数介绍和使用,可以到 pkg.go.dev/math 进行查看。

Abs 函数

Abs(x float64) float64:返回 x 的绝对值。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Abs(-3.14)) // 3.14
}
复制代码

Max 函数

Max(x, y float64) float64:返回 xy 中的最大值。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Max(1.5, 2.5)) // 2.5
}
复制代码

Min 函数

Min(x, y float64) float64:返回 xy 中的最小值。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Min(1.5, 2.5)) // 1.5
}
复制代码

Ceil

Ceil(x float64) float64:返回一个大于等于 x 的最小整数值,也就是向上取整。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Ceil(1.4)) // 2
    fmt.Println(math.Ceil(2))   // 2
}
复制代码

Floor 函数

Ceil(x float64) float64:返回一个小于等于 x 的最小整数值,也就是向下取整。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Floor(1.4)) // 1
    fmt.Println(math.Floor(1))   // 1
}
复制代码

Trunc 函数

Trunc(x float64) float64:返回浮点数 x 的整数部分,使用 Floor 函数也能实现。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Trunc(1.4)) // 1
}
复制代码

Dim 函数

Dim(x, y float64) float64:返回 x-y0 中最大的值。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Dim(2.0, 1.0)) // 1
    fmt.Println(math.Dim(1.0, 2.0)) // 0
}
复制代码

Mod 函数

Mod(x, y float64) float64:对 x / y 进行取余运算 x % y。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Mod(5.0, 3.0)) // 3
    fmt.Println(math.Mod(3.0, 3.0)) // 0
}
复制代码

Pow 函数

Pow(x, y float64) float64:计算 xy 次幂。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Pow(2, 1)) // 2
    fmt.Println(math.Pow(2, 5)) // 32
}
复制代码

Sqrt 函数

Sqrt(x float64) float64:对 x 开平方。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Sqrt(64)) // 8
    fmt.Println(math.Sqrt(16)) // 4
}
复制代码

Cbrt 函数

Cbrt(x float64) float64:对 x 开立方。 示例:

import (
    "fmt"
    "math"
)
func main() {
    fmt.Println(math.Cbrt(64)) // 4
    fmt.Println(math.Cbrt(8))  // 2
}
复制代码

Modf 函数

Modf(f float64) (int float64, frac float64):分别取出 f 的整数部分和小数部分。

  • int 参数,整数部分。
  • frac 参数,小数部分。 示例:
import (
    "fmt"
    "math"
)
func main() {
    integer, decimal := math.Modf(3.1415)
    fmt.Printf("整数部分:%.f 小数部分:%.4f", integer, decimal) // 整数部分:3 小数部分:0.1415
}
复制代码

rand

rand 标准库提供了多个获取不同类型随机数的函数。

常用函数

函数 说明
Int() int 返回一个 int 类型的非负的伪随机数
Intn(n int) int 返回一个 0n 中(不包括 n)的 int 类型的非负伪随机数
Int31() int32 返回一个 int32 类型的非负的伪随机数
Uint32() uint32 返回一个 uint32 类型的非负的伪随机数
Int31n(n int32) int32 返回一个 0n 中(不包括 n)的 int32 类型的非负伪随机数
Int63() int64 返回一个 int64 类型的非负的伪随机数
Uint64() uint64 返回一个 uint64 类型的非负的伪随机数
Int63n(n int64) int64 返回一个 0n 中(不包括 n)的 int64 类型的非负伪随机数
Float32() float32 返回一个 0.01.0 中(不包括 1.0)的 float32 类型的非负伪随机数
Float64() float64 返回一个 0.01.0 中(不包括 1.0)的 float64 类型的非负伪随机数
Seed(seed int64) 设置随机种子,使得每次获取随机数的值都不一样

如果想了解更多函数介绍和使用,可以到 pkg.go.dev/math/rand 进行查看。

代码示例

import (
    "fmt"
    "math/rand"
)
func main() {
    fmt.Println(rand.Int())      // 5577006791947779410
    fmt.Println(rand.Intn(10))   // 7
    fmt.Println(rand.Int31())    // 1427131847
    fmt.Println(rand.Uint32())   // 1879968118
    fmt.Println(rand.Int31n(10)) // 1
    fmt.Println(rand.Int63())    // 6334824724549167320
    fmt.Println(rand.Uint64())   // 9828766684487745566
    fmt.Println(rand.Int63n(10)) // 8
    fmt.Println(rand.Float32())  // 0.09696952
    fmt.Println(rand.Float64())  // 0.30091186058528707
}
复制代码

多次运行上述代码,发现获取到的随机数都是一样的,这是因为我们没有设置随机种子。可以通过 Seed 函数进行设置:

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().Unix())
    fmt.Println(rand.Intn(10))
}
复制代码

使用 Seed 函数设置随机种子,将当前时间的秒数作为参数。后续多次获取随机数的值将不会一直一样。

小结

本文介绍了标准库 mathrand 的常用函数的用法,并通过例子进行说明。

math 库里虽说有最大值和最小值比较,但是形参类型必须是浮点型,如果我们想比较的是整型的最大最小值,就得自己封装函数。

获取随机数时,不要忘记设置随机种子,否则多次获取到的随机数将会是一样的。

目录
相关文章
|
7天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
7天前
|
SQL 开发框架 .NET
你确定不学?Go标准库之 text/template
你确定不学?Go标准库之 text/template
11 2
|
7天前
|
Go 数据处理
Go杂记1-切片Slice作为函数参数那点事儿
Go杂记1-切片Slice作为函数参数那点事儿
8 0
|
7天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
91 1
|
7天前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
24 0
|
7天前
|
NoSQL Shell Go
在go中简单使用go-redis库
在go中简单使用go-redis库
|
7天前
|
存储 Go 开发者
【Go语言专栏】函数在Go语言中的使用与实现
【4月更文挑战第30天】本文介绍了Go语言中函数的使用和实现,包括函数定义、参数传递、返回值、匿名函数、变长参数、函数类型、闭包和错误处理。通过示例展示了如何定义和调用函数,以及如何利用闭包和递归解决问题。此外,还提到了Go函数作为一等公民的特性,允许存储和传递。进一步学习可参考官方文档和相关书籍。
|
7天前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
29 1
|
7天前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
31 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
7天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解