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内置函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang官方限流器库实现限流示例详解

    Golang官方限流器库实现限流示例详解

    这篇文章主要为大家介绍了Golang官方限流器库使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 谈谈对Golang IO读写的困惑

    谈谈对Golang IO读写的困惑

    这篇文章主要介绍了谈谈对Golang IO读写的困惑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 在Go程序中实现服务器重启的方法

    在Go程序中实现服务器重启的方法

    这篇文章主要介绍了在Go程序中实现服务器重启的方法,由于很多人盲目崇拜谷歌"亲爹",Go语言在国内有着不寻常的人气,需要的朋友可以参考下
    2015-06-06
  • Go设计模式之中介者模式讲解和代码示例

    Go设计模式之中介者模式讲解和代码示例

    中介者是一种行为设计模式,让程序组件通过特殊的中介者对象进行间接沟通,达到减少组件之间依赖关系的目的,因此本文就给大家详细介绍一下Go中介者模式,需要的朋友可以参考下
    2023-06-06
  • Go语言中的并发模式你了解了吗

    Go语言中的并发模式你了解了吗

    工作中查看项目代码,发现会存在使用 GO 语言做并发的时候出现各种各样的异常情况,实际上,出现上述的情况,还是因为我们对于 GO 语言的并发模型和涉及的 GO 语言基础不够扎实,所以本文小编就来带大家深入了解下Go语言中的并发模式吧
    2023-08-08
  • 详解Go语言如何解决map并发安全问题

    详解Go语言如何解决map并发安全问题

    常说go语言是一门并发友好的语言,对于并发操作总会在编译期完成安全检查,所以这篇文章我们就来聊聊go语言是如何解决map这个数据结构的线程安全问题吧
    2024-04-04
  • 一文带大家了解Go语言中的内联优化

    一文带大家了解Go语言中的内联优化

    内联优化是一种常见的编译器优化策略,通俗来讲,就是把函数在它被调用的地方展开,这样可以减少函数调用所带来的开销,本文主要为大家介绍了Go中内联优化的具体使用,需要的可以参考下
    2023-05-05
  • etcd通信接口之客户端API核心方法实战

    etcd通信接口之客户端API核心方法实战

    这篇文章主要为大家介绍了etcd通信接口之客户端API核心方法实战,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • GoLang中生成UUID唯一标识的实现方法

    GoLang中生成UUID唯一标识的实现方法

    UUID是让分散式系统中的所有元素,都能有唯一的辨识信息,本文主要介绍了GoLang中生成UUID唯一标识的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Golang中sync.Mutex的源码分析

    Golang中sync.Mutex的源码分析

    这篇文章将带大家从源码分析一下Golang中sync.Mutex的使用,文中的示例代码讲解详细,对我们学习Golang有一定的帮助,需要的可以参考一下
    2023-03-03

最新评论