在Go语言中,内置函数是语言本身直接支持、无需导入任何包即可直接使用的函数。这些函数涵盖了内存分配、数据结构操作、错误处理、数学运算、字符串处理等常见任务。以下是Go语言中常见的内置函数分类及详细说明:


1. 基本数据操作

1.1 获取长度和容量

  • len(x) 返回字符串、数组、切片、映射(map)、通道(channel)或结构体的长度(元素个数)。
  • cap(x) 返回数组、切片或通道的容量(最大容量,仅适用于可扩展的数据结构)。

示例

s := "Hello"
arr := [3]int{1, 2, 3}
slice := []int{1, 2, 3}
m := map[string]int{"a": 1}

fmt.Println(len(s))    // 输出 5
fmt.Println(cap(slice)) // 输出 3(默认容量)

1.2 复数操作

  • complex(r, i) 创建复数(r 为实部,i 为虚部)。
  • real(c) 返回复数 c 的实部。
  • imag(c) 返回复数 c 的虚部。

示例

c := complex(3, 4) // 3+4i
fmt.Println(real(c))  // 输出 3
fmt.Println(imag(c))  // 输出 4

1.3 最值操作(Go 1.21+)

  • min(x, y) 返回两个值中的较小值。
  • max(x, y) 返回两个值中的较大值。

示例

fmt.Println(min(3, 5)) // 输出 3
fmt.Println(max(3, 5)) // 输出 5

2. 内存分配

2.1 newmake

  • new(T) 分配类型 T 的零值内存,并返回指针(*T),适用于基本类型(如 intstruct)。
  • make(T, size, cap) 用于创建切片(slice)、映射(map)或通道(channel),需要指定类型和初始化参数。

示例

p := new(int)       // 分配 int 类型内存,*p = 0
slice := make([]int, 3) // 创建长度为3的切片,元素为0
m := make(map[string]int) // 创建空映射

3. 错误处理

3.1 panicrecover

  • panic(v) 触发运行时错误,终止当前goroutine的执行。
  • recover()defer 函数中捕获 panic 错误,恢复程序正常执行。

示例

func safeDivide(a, b int) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from panic:", r)
        }
    }()
    if b == 0 {
        panic("division by zero")
    }
    fmt.Println(a / b)
}

safeDivide(4, 0) // 输出: Recovered from panic: division by zero

4. 切片和映射操作

4.1 切片操作

  • append(slice, elements...) 向切片追加元素,返回新切片。
  • copy(dst, src []T) 将源切片 src 的元素复制到目标切片 dst,返回复制的元素个数。
  • clear(slice)(Go 1.21+) 清空切片元素(元素置为零值,长度归零)。
  • delete(map, key) 从映射中删除指定键的键值对。

示例

slice := []int{1, 2, 3}
slice = append(slice, 4) // [1,2,3,4]
copySlice := make([]int, 3)
copy(copySlice, slice) // copySlice = [1,2,3]

m := map[string]int{"a": 1}
delete(m, "a") // m 为空

5. 通道(Channel)操作

  • close(channel) 关闭通道,表示不再发送数据。
  • range channel 遍历通道中的数据,直到通道关闭。

示例

ch := make(chan int)
go func() {
    ch <- 1
    ch <- 2
    close(ch)
}()
for v := range ch {
    fmt.Println(v) // 输出 1, 2
}

6. 其他实用函数

6.1 类型转换

  • string(v) 将整型、字节切片等转换为字符串。
  • int(v)float64(v) 将其他类型转换为整型或浮点型。

示例

b := []byte{72, 101, 108, 108, 111}
s := string(b) // "Hello"
//在Go语言中,直接对浮点数字面量进行类型转换会触发编译错误,这是Go类型系统的安全机制所致
i := int(3.14) 

f := 3.14
i := int(f)  // 合法转换,结果为3(截断小数)

6.2 底层打印

  • print(args...) 低级打印函数(不推荐在生产环境中使用)。
  • println(args...) 低级打印函数,自动添加换行符。

示例

print("Hello") // 输出 Hello(无换行)
println("World") // 输出 World(带换行)

7. Go 1.21 新增函数

  • clear(x) 清空切片或映射的元素(切片置零值,映射清空)。
  • min(x, y) 返回两个值中的最小值。
  • max(x, y) 返回两个值中的最大值。

示例

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

总结

Go语言的内置函数是高效编程的核心工具,涵盖了从基础数据操作到高级并发控制的各个方面。以下是部分关键函数的速查表:

分类函数名功能说明
数据操作len, cap获取长度/容量
复数处理complex, real, imag创建和操作复数
内存分配new, make分配内存
错误处理panic, recover错误触发与恢复
切片操作append, copy, clear追加、复制、清空切片
映射操作delete删除键值对
通道操作close关闭通道
类型转换string, int, float64转换类型
最值操作min, max返回最小/最大值(Go 1.21+)

通过熟练掌握这些内置函数,可以显著提高Go语言开发的效率和代码质量。