golang内置函数(buildin)
一、说明
Golang设计者为了编程方便,提供了一些函数,这些函数可以直接使用,我们称为Go的内置函数。
二、常用函数
1. len()
func len(v Type) int
函数len返回 v 的长度
数组:v中元素的数量
数组指针:*v中元素的数量(v为nil时panic)
切片、映射:v中元素的数量;若v为nil,len(v)即为零
字符串:v中字节的数量
通道:通道缓存中队列(未读取)元素的数量;若v为 nil,len(v)即为零
2. new()
func new(Type) *Type
用来分配内存,主要用来分配值类型。比如:int,float32,struct...。其第一个实参为类型,而非值。其返回值为指向该类型的新分配的零值的指针。
package main
import (
"fmt"
)
func main() {
num := new(int)
fmt.Printf("num的类型%T,num的值=%v,num的地址=%v,num指向的值=%v\n", num, num, &num, *num)
}
输出结果:
num的类型*int,num的值=0xc0000a2058,num的地址=0xc0000cc018,num指向的值=0
内存示意图如下:

3. make()
func make(Type, size IntegerType) Type
用来分配内存,主要用来分配引用类型,比如:slice,map,chan。其第一个实参为类型,而非值。make的返回类型与其参数相同,而非指向它的指针
切片:size指定了其长度。该切片的容量等于其长度。切片支持第二个整数实参可用来指定不同的容量;
它必须不小于其长度,因此 make([]int, 0, 10) 会分配一个长度为0,容量为10的切片。
映射:初始分配的创建取决于size,但产生的映射长度为0。size可以省略,这种情况下就会分配一个
小的起始大小。
通道:通道的缓存根据指定的缓存容量初始化。若 size为零或被省略,该信道即为无缓存的。
4. panic()
func panic(v interface{})
内建函数panic停止当前Go程的正常执行。当函数F调用panic时,F的正常执行就会立刻停止。F中defer的所有函数先入后出执行后,F返回给其调用者G。G如同F一样行动,层层返回,直到该Go程中所有函数都按相反的顺序停止执行。之后,程序被终止,而错误情况会被报告,包括引发该恐慌的实参值,此终止序列称为恐慌过程。
5. recover()
func recover() interface{}
内建函数recover允许程序管理恐慌过程中的Go程。在defer的函数中,执行recover调用会取回传至panic调用的错误值,恢复正常执行,停止恐慌过程。若recover在defer的函数之外被调用,它将不会停止恐慌过程序列。在此情况下,或当该Go程不在恐慌过程中时,或提供给panic的实参为nil时,recover就会返回nil。
6. cap()
func cap(v Type) int
内建函数cap返回 v 的容量,这取决于具体类型:
数组:v中元素的数量
数组指针:*v中元素的数量(v为nil时panic)
切片、映射:v中元素的数量;若v为nil,len(v)即为零
字符串:v中字节的数量
通道:通道缓存中队列(未读取)元素的数量;若v为 nil,len(v)即为零
7. append()
func append(slice []Type, elems ...Type) []Type
内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。
slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)
作为特例,可以向一个字节切片append字符串,如下:
slice = append([]byte("hello "), "world"...)
8. copy()
func copy(dst, src []Type) int
内建函数copy将元素从来源切片复制到目标切片中,也能将字节从字符串复制到字节切片中。copy返回被复制的元素数量,它会是 len(src) 和 len(dst) 中较小的那个。来源和目标的底层内存可以重叠

浙公网安备 33010602011771号