Go语言常用内置函数

Keywords: #技术 #Golang
Table of Contents

Go 语言在 1.21 版本中引入了 3 个泛型函数作为内置函数,分别是 minmaxclear ,这使得 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!")

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 不变

如果 mapslicenil,函数 clear 的执行则是无效操作。

s := []int{1, 2, 3}
clear(s) // s = [0, 0, 0]

m := map[string]int{"go": 100, "php": 80}
clear(m) // m = {}