Go 1.21新增的内置函数(built-in functions)详解

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,则不做任何操作。

相关推荐
虚行23 分钟前
Python学习入门
开发语言·python·学习
南囝coding27 分钟前
《独立开发者精选工具》
前端·后端·开源
总有刁民想爱朕ha27 分钟前
Python自动化从入门到实战(23):Python打地鼠游戏开发
开发语言·python·游戏开发
曹牧27 分钟前
C#:函数默认参数
开发语言·c#
IT_陈寒30 分钟前
JavaScript 性能优化的 7 个致命陷阱:我从 P5 到 P8 的核心突破都在这里!
前端·人工智能·后端
黄焖鸡能干四碗37 分钟前
MES生产执行制造系统建设(Java+Mysql)
java·大数据·开发语言·信息可视化·需求分析
workflower39 分钟前
跨链协同制造中的服务博弈与激励机制
开发语言·软件工程·制造·需求分析·个人开发·结对编程
liulilittle44 分钟前
Y组合子剖析:C++ 中的递归魔法
开发语言·c++·编程语言·函数式编程·函数式·函数编程·y组合子
舒克日记44 分钟前
基于springboot的民谣网站的设计与实现
java·spring boot·后端
风象南1 小时前
除了JSON/XML,你还应该了解的数据描述语言ASN.1 —— 附《SpringBoot实现ASN.1在线解析工具》
后端