go语言常用内置函数
close
func close(c chan<- Type)
close用于关闭一个channel,使用close函数要注意以下几点:
- 关闭一个只接受的channel会导致错误
- 在一个已经关闭的channel上发送数据会导致panic
- 关闭一个nil channel会导致panic
- 在一个channel关闭之后,如果channel已经没有剩余数据等待接受了,这时候如果继续接收,会返回一个channel对应数据类型的nil value,如果接收的时候使用多返回值,第二个参数表示一个channel是否已经关闭。
len、cap
len:获取容器已存储的元素个数,不是容器的容量。
func len(v Type) int
cap:获取容器的最大存储元素的容量。
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函数可以为切片动态添加元素,然后返回新的切片变量。
func append(slice []Type, elems ...Type) []type
slice为需要追加的源切片,elems为可变参数列表,返回值为追加后的切片。
在调用此函数时,通常需要以slice接收追加后的返回切片,否则slice仍为追加前的数据。
实例:
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,则什么也不做
func delete(m map[Type]Type1, key Type)
new
new函数用来分配内存,一般是一个参数,参数为类型,它的返回值是一个指向新分配类型的指针,并且内存置为零。
func new(Type) *Type
new经常用来初始化结构体。
make
func make(Type, size IntegerType) Type
内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上)。
跟 new 相同的是,第一个参数也是一个类型,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型。
m>=n,且n和m必须是整型且不能为负数。
copy
copy() 可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。
srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice),目标切片必须分配过空间且足够承载复制的元素个数,并且来源和目标的类型必须一致,copy() 函数的返回值表示实际发生复制的元素个数。
copy( destSlice, srcSlice []T) int
实例:
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 用于创建一个复数并返回。
func complex(r,i FloatType) ComplexType
参数列表中r 为复数的实部,i 表示为复数的虚部。
real
func real(c ComplexType) FloatType
real函数用于获取一个复数的实部。
imag
func imag(c ComplexType) FloatType
imag函数用于获取一个复数的虚部。
panic
func panic(v interface{})
panic 表示进程内的错误。panic 的原因来自于代码的逻辑 bug,比如强制类型转换失败,比如数组越界。这个代表了程序员的责任不到位,导致了程序的panic。
error 代表进程外的错误。比如输入符合预期。比如访问外部的服务失败。这些都不是程序员可以设计控制的。这些情况的错误处理是业务逻辑的一部分。
golang中提供panic用于错误处理。
panic,直译为运行时恐慌,当panic被抛出异常后,如果我们没有在程序中添加任何保护措施的话,程序就会打印出panic的详细情况之后,终止运行。