Go语言常用内置函数
Table of Contents
Go 语言在 1.21 版本中引入了 3 个泛型函数作为内置函数,分别是 min
、max
和 clear
,这使得 Go 语言编程更加方便。
append
将元素/切片追加到另一个切片末尾,返回一个新切片。
func append(slice []Type, elems ...Type) []Type
slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)
slice = append(anotherSlice, slice...)
copy
将源切片复制到目标片,返回切片长度。
func copy(dst, src []Type) int
var a = []int{0, 1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 6)
n := copy(s, a)
// s = [0 1 2 3 4 5]
// n = 6
delete
从集合 map 中删除键值对。
func delete(m map[Type]Type1, key Type)
m := map[string]int{"a": 1, "b": 2}
delete(m, "b")
// m = {"a": 1}
len
- 传入数组,返回数组的元素个数。
- 传入指向数组的指针,返回
*v
的元素个数。 - 传入 slice 或者 map ,返回 v 的元素个数。
func len(v Type) int
v := []int{1,2,3,4,5}
n = len(v)
// n = 5
cap
- 传入数组,返回数组的元素个数,
=len(v)
- 传入指向数组的指针,返回
*v
的元素个数,=len(v)
- 传入 slice 或者 map,返回 slice 最大容量,
>=len(v)
func cap(v Type) int
v := make([]int, 0, 5)
n := cap(v)
// n = 5
new
分配内存并初始化为该类型的零值,返回指向该内存的指针。
func new(Type) *Type
p := new(int)
// p = 0
make
创建切片 slice、集合 map 或通道 chan,并初始化它们。
func make(t Type, size ...IntegerType) Type
与
new
一样,第一个参数是类型,而不是值。与new
不同,make 的返回类型与其参数的类型相同,而不是指向它的指针。
s := make([]int, 3, 5)
m := make(map[string]int)
c := make(chan int, 2)
complex real imag
func complex(r, i FloatType) ComplexType
func real(c ComplexType) FloatType
func imag(c ComplexType) FloatType
使用 complex 函数构建复数,并使用 real 和 imag 函数返回复数的实部和虚部。
x := complex(1,2) // 1+2i
r := real(x) // 1
i := imag(x) // 2
close
关闭一个通道,该通道必须是双向的或仅限发送的.
func close(c chan<- Type)
panic recover
func panic(v interface{})
func recover() interface{}
使用 panic 抛出一个异常,在 defer 中通过 recover 捕获这个异常,进行处理。
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
panic("Panic!")
print println
Go 语言底层打印函数,用于输出字符,不推荐生产环境使用。
func print(args ...Type)
func println(args ...Type)
max min
Go 1.21 新增内置函数 min 和 max,用于返回最大最小值。
func max[T cmp.Ordered](x T, y ...T) T
func min[T cmp.Ordered](x T, y ...T) T
min 和 max 函数支持同时输入多个数据和多种数据类型。并且数据类型可以混合输入,返回数据原来的类型。不支持输入切片。
cmp.Ordered
是泛型新增的数据类型。包含以下数据类型:
type Ordered interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
~float32 | ~float64 |
~string
}
min(1, 2, 3)
max(1, 2, 3)
min(1.5, 2.5, 3.5)
max(1.5, 2.5, 3.5)
min("hello", "world")
clear
Go 1.21 新增内置函数 clear,用于清除集合 map 中的所有元素,将 slice 中所有元素变为该类型的零值。
func clear[T ~[]Type | ~map[Type]Type1](t T)
- 如果是
map
,则删除map
中的所有元素,返回一个空map
,len 为 0 - 如果是
slice
,则将slice
中的所有元素改为切片类型的零值。len 不变
如果 map
,slice
为 nil
,函数 clear
的执行则是无效操作。
s := []int{1, 2, 3}
clear(s) // s = [0, 0, 0]
m := map[string]int{"go": 100, "php": 80}
clear(m) // m = {}