go语言常用内置函数
close
1 | func close(c chan <- Type) |
close用于关闭一个channel,使用close函数要注意以下几点:
- 关闭一个只接受的channel会导致错误
- 在一个已经关闭的channel上发送数据会导致panic
- 关闭一个nil channel会导致panic
- 在一个channel关闭之后,如果channel已经没有剩余数据等待接受了,这时候如果继续接收,会返回一个channel对应数据类型的nil value,如果接收的时候使用多返回值,第二个参数表示一个channel是否已经关闭。
len、cap
len:获取容器已存储的元素个数,不是容器的容量。
1 | func len(v Type) int |
cap:获取容器的最大存储元素的容量。
1 | func cap(v Type) int |
len和cap都接收多种类型的参数,返回值是int类型,具体接收哪些类型的参数以及返回的值的含义见下表
len,cap的返回值满足如下条件:
- 0<=len(s)<=cap(s)
- slice,map,channel的nil值的len为0
- slice,channel的nil值的cap为0
append
append函数可以为切片动态添加元素,然后返回新的切片变量。
1 | func append(slice []Type, elems ...Type) [] type |
slice为需要追加的源切片,elems为可变参数列表,返回值为追加后的切片。
在调用此函数时,通常需要以slice接收追加后的返回切片,否则slice仍为追加前的数据。
实例:
1 2 3 4 | var a []int a = append(a, 1) // 追加1个元素 a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式 a = append(a, []int{1,2,3}...) // 追加一个切片, 切片需要解包 |
不过需要注意的是,在使用 append() 函数为切片动态添加元素时,如果空间不足以容纳足够多的元素,切片就会进行“扩容”,此时新切片的长度会发生改变。
delete
delete函数用于删除map中对应key的键值对,如果map中不存在该key,则什么也不做
1 | func delete(m map [Type]Type1, key Type) |
new
new函数用来分配内存,一般是一个参数,参数为类型,它的返回值是一个指向新分配类型的指针,并且内存置为零。
1 | func new(Type) *Type |
new经常用来初始化结构体。
make
1 | func make(Type, size IntegerType) Type |
内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上)。
跟 new 相同的是,第一个参数也是一个类型,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型。
m>=n,且n和m必须是整型且不能为负数。
copy
copy() 可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。
srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice),目标切片必须分配过空间且足够承载复制的元素个数,并且来源和目标的类型必须一致,copy() 函数的返回值表示实际发生复制的元素个数。
1 | copy( destSlice, srcSlice []T) int |
实例:
1 2 3 4 | slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置 |
complex
complex 用于创建一个复数并返回。
1 | func complex(r,i FloatType) ComplexType |
参数列表中r 为复数的实部,i 表示为复数的虚部。
real
1 | func real(c ComplexType) FloatType |
real函数用于获取一个复数的实部。
imag
1 | func imag(c ComplexType) FloatType |
imag函数用于获取一个复数的虚部。
panic
1 | func panic(v interface {}) |
panic 表示进程内的错误。panic 的原因来自于代码的逻辑 bug,比如强制类型转换失败,比如数组越界。这个代表了程序员的责任不到位,导致了程序的panic。
error 代表进程外的错误。比如输入符合预期。比如访问外部的服务失败。这些都不是程序员可以设计控制的。这些情况的错误处理是业务逻辑的一部分。
golang中提供panic用于错误处理。
panic,直译为运行时恐慌,当panic被抛出异常后,如果我们没有在程序中添加任何保护措施的话,程序就会打印出panic的详细情况之后,终止运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-03-26 Stm32基础