Go1.21新增内置函数(built-in functions)详解

 更新时间:2023年08月18日 09:20:35   作者:路多辛  
Go 1.21新增的内置函数分别是 min、max 和 clear,这篇文章主要带大家一起了解一下这几个函数的用途和使用示例,感兴趣的小伙伴可以学习一下

Go 1.21新增的内置函数分别是 min、max 和 clear,接下来看下这几个函数的用途和使用示例。

在编程过程中,需要知道一组值中的最大或最小值的场景是很常见的,比如排序、统计等场景。之前都需要自己写代码来实现这个功能,现在 Go 1.21引入了两个新的内置函数 min 和 max 来实现了这个功能。

min

函数定义如下:

func min[T cmp.Ordered](x T, y ...T) T

用于计算给定数量的有序类型数据中的的最小值,参数至少为一个。与操作符相同的类型规则适用:对于有序参数 x 和 y,如果 x + y 有效,则 min(x, y) 有效,并且 min(x, y) 的类型和 x + y 的类型也一样(对于 max 函数也是类似的)。如果所有参数都是常量,则结果也是常量。简单示例如下:

package main
 
import "fmt"
 
func main() {
    var x, y int = 1, 6
    fmt.Println(min(y))         // 6
    fmt.Println(min(x, y))      // 1
    fmt.Println(min(0, x, y))   // 0
    fmt.Println(min(x, y, 4.0)) // 1
    fmt.Println(min("a", "b"))  // a
}

max 

函数定义如下:

func max[T cmp.Ordered](x T, y ...T) T

用于计算给定数量的有序类型数据中的的最大值,参数至少为一个,其他特性和 min 类似。简单示例如下:

package main
 
import "fmt"
 
func main() {
    var x, y int = 1, 6
    fmt.Println(max(y))         // 6
    fmt.Println(max(x, y))      // 6
    fmt.Println(max(0, x, y))   // 6
    fmt.Println(max(x, y, 4.0)) // 6
    fmt.Println(max("a", "b"))  // b
}

Clear

函数定义如下:

func clear[T ~[]Type | ~map[Type]Type1](t T)

作用是删除或清空所有元素。接受 map 和 slice类型的实参。当参数为 map 类型时,会删除 map 中所有元素,map 的长度变为 0,简单示例如下:

package main
 
import "fmt"
 
func main() {
    m := map[string]string{"foo": "bar", "foo2": "bar2"}
    clear(m)
    fmt.Println(len(m)) // 0
}

当参数为切片类型时,将切片中的所有元素设置为对应类型的零值,clear 前后切片的长度和容量都保持不变。

package main
import "fmt"
func main() {
    s1 := []int{1, 2, 3, 4}
    clear(s1)
    fmt.Println(s1) // [0 0 0 0]
    s2 := []string{"路多辛的博客", "路多辛的所思所想", "a", "b"}
    clear(s2)
    fmt.Println(s2) // [   ]
}

如果传入的 map 或 slice 类型值为 nil,则不做任何操作。

到此这篇关于Go1.21新增内置函数(built-in functions)详解的文章就介绍到这了,更多相关Go内置函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go值赋值和引用赋值的使用

    go值赋值和引用赋值的使用

    本文将介绍Go语言中的值赋值和引用赋值,并比较它们之间的差异,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • Go 实现 WebSockets和什么是 WebSockets

    Go 实现 WebSockets和什么是 WebSockets

    这篇文章主要介绍了Go 实现 WebSockets和什么是 WebSockets,WebSockets 是构建实时应用程序的第一大解决方案,在线游戏、即时通讯、跟踪应用程序等,下文相关内容介绍需要的小伙伴可以参考一下
    2022-04-04
  • 基于go interface{}==nil 的几种坑及原理分析

    基于go interface{}==nil 的几种坑及原理分析

    这篇文章主要介绍了基于go interface{}==nil 的几种坑及原理分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言实现牛顿法求平方根函数的案例

    Go语言实现牛顿法求平方根函数的案例

    这篇文章主要介绍了Go语言实现牛顿法求平方根函数的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 使用Go和Gorm实现读取SQLCipher加密数据库

    使用Go和Gorm实现读取SQLCipher加密数据库

    本文档主要描述通过Go和Gorm实现生成和读取SQLCipher加密数据库以及其中踩的一些坑,文章通过代码示例讲解的非常详细, 对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-06-06
  • Go语言中的Iota关键字

    Go语言中的Iota关键字

    这篇文章介绍了Go语言中的Iota关键字,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Golang中crypto/rand库的使用技巧与最佳实践

    Golang中crypto/rand库的使用技巧与最佳实践

    在Golang的众多随机数生成库中,crypto/rand 是一个专为加密安全设计的库,本文主要介绍了Golang中crypto/rand库的使用技巧与最佳实践,感兴趣的可以了解一下
    2024-02-02
  • Go+Vue开发一个线上外卖应用的流程(用户名密码和图形验证码)

    Go+Vue开发一个线上外卖应用的流程(用户名密码和图形验证码)

    这篇文章主要介绍了Go+Vue开发一个线上外卖应用(用户名密码和图形验证码),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 一文带你深入了解Go语言中切片的奥秘

    一文带你深入了解Go语言中切片的奥秘

    切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。本文将通过示例带大家一起探索一下Go语言中切片的奥秘,感兴趣的可以了解一下
    2022-11-11
  • 使用GO语言实现Mysql数据库CURD的简单示例

    使用GO语言实现Mysql数据库CURD的简单示例

    本文主要介绍了使用GO语言实现Mysql数据库CURD的简单示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论