Golang的内置函数是语言层面直接提供的工具函数,不需要额外导入包就可以直接使用,覆盖了数组切片操作、类型转换、错误处理、并发控制等多个场景,是日常编码中高频使用的工具。

Golang内置函数分类说明
基础操作类内置函数
这类函数主要用于处理基础数据类型和结构的常见操作,使用频率极高。
- len:用于获取数组、切片、字符串、map、通道等类型的长度或元素个数。对于字符串,返回的是字节数而非字符数。
- cap:用于获取数组、切片、通道的容量,即在不重新分配内存的情况下最多能容纳的元素数量。
- append:用于向切片末尾追加元素,如果切片容量不足会自动扩容,返回新的切片。
- copy:用于将一个切片的元素复制到另一个切片,复制长度取两个切片长度的最小值。
以下是这类函数的使用示例:
package main
import "fmt"
func main() {
// len函数示例
str := "hello"
slice := []int{1, 2, 3}
fmt.Println(len(str)) // 输出5,字符串字节数
fmt.Println(len(slice)) // 输出3,切片元素个数
// cap函数示例
arr := make([]int, 3, 5)
fmt.Println(cap(arr)) // 输出5,切片容量
// append函数示例
newSlice := append(slice, 4, 5)
fmt.Println(newSlice) // 输出[1 2 3 4 5]
// copy函数示例
src := []int{1, 2, 3}
dst := make([]int, 2)
copy(dst, src)
fmt.Println(dst) // 输出[1 2]
}
内存与类型操作类内置函数
这类函数主要用于内存分配、类型转换和类型判断相关操作。
- make:用于创建切片、map、通道类型的内建引用类型,会分配内存并初始化对应的结构,返回对应类型的实例。
- new:用于分配内存,返回对应类型的指针,内存会被初始化为零值,适用于所有类型。
- delete:用于删除map中指定键对应的键值对,如果键不存在不会报错。
- complex、real、imag:用于处理复数类型,complex用于创建复数,real获取实部,imag获取虚部。
- panic、recover:用于错误处理,panic用于抛出运行时异常,recover用于捕获panic异常,通常配合defer使用。
相关使用示例:
package main
import "fmt"
func main() {
// make函数示例
slice := make([]int, 3, 5)
m := make(map[string]int)
ch := make(chan int, 2)
// new函数示例
numPtr := new(int)
fmt.Println(*numPtr) // 输出0,零值
// delete函数示例
m["a"] = 1
delete(m, "a")
fmt.Println(m) // 输出map[]
// 复数操作示例
c := complex(1, 2)
fmt.Println(real(c)) // 输出1
fmt.Println(imag(c)) // 输出2
// panic和recover示例
defer func() {
if err := recover(); err != nil {
fmt.Println("捕获到异常:", err)
}
}()
panic("测试异常")
}
并发相关内置函数
Golang的并发特性依赖几个内置函数实现。
- go:用于启动一个新的goroutine,执行对应的函数,实现并发执行。
- close:用于关闭通道,关闭后的通道不能再进行发送操作,但可以接收剩余元素。
- select:用于监听多个通道的操作,当其中一个通道就绪时执行对应的分支,类似switch但用于通道操作。
并发相关函数示例:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 1)
// go启动goroutine
go func() {
time.Sleep(time.Second)
ch <- 100
}()
// select监听通道
select {
case val := <-ch:
fmt.Println("接收到值:", val)
case <-time.After(2 * time.Second):
fmt.Println("超时")
}
// 关闭通道
close(ch)
}
Golang常用内置函数速查列表
下表整理了常用内置函数的名称、作用和使用场景,方便快速查阅:
| 函数名 | 作用说明 | 适用类型/场景 |
|---|---|---|
| len | 获取长度或元素个数 | 数组、切片、字符串、map、通道 |
| cap | 获取容量 | 数组、切片、通道 |
| append | 向切片追加元素 | 切片 |
| copy | 复制切片元素 | 切片 |
| make | 创建引用类型并初始化 | 切片、map、通道 |
| new | 分配内存返回指针 | 所有类型 |
| delete | 删除map键值对 | map |
| close | 关闭通道 | 通道 |
| panic | 抛出运行时异常 | 错误处理场景 |
| recover | 捕获panic异常 | 配合defer的错误处理场景 |
| go | 启动goroutine | 并发执行函数 |
| select | 监听多个通道操作 | 多通道并发场景 |
| complex | 创建复数 | 复数类型操作 |
| real | 获取复数实部 | 复数类型操作 |
| imag | 获取复数虚部 | 复数类型操作 |
内置函数使用注意事项
在使用Golang内置函数时,需要注意以下几点避免出错:
- append函数每次调用都会返回新的切片,如果原切片还有引用,需要接收返回值才能拿到追加后的结果。
- delete函数删除不存在的map键不会报错,使用前如果需要判断键是否存在,可以先通过val, ok := m[key]的方式判断。
- close函数只能关闭通道,不能关闭文件、网络连接等其他资源,且关闭后的通道不能再次发送数据,否则会panic。
- recover函数只有在defer调用的函数中执行才会生效,直接在其他位置调用无法捕获异常。
- 使用new分配内存时,返回的是对应类型的指针,如果需要值类型可以直接声明变量,不需要使用new。
内置函数是Golang语言设计简洁性的体现,熟练掌握这些函数的使用,能够大幅减少日常编码的工作量,建议开发者多结合实际场景练习,加深理解。