go 内置函数

go 的内置函数不拥有前面提到的go的标准类型,因此内置函数不能作为一个函数值赋值给函数类型的变量。

close

close用于关闭一个channel,使用close函数要注意以下几点:

  • 关闭一个只接受的channel会导致错误
  • 在一个已经关闭的channel上发送数据会导致panic
  • 关闭一个nil channel会导致panic
  • 在一个channel关闭之后,如果channel已经没有剩余数据等待接受了,这时候如果继续接收,会返回一个channel对应数据类型的nil value,如果接收的时候使用多返回值,第二个参数表示一个channel是否已经关闭。

len和cap

len和cap都接收多种类型的参数,返回值是int类型,具体接收哪些类型的参数以及返回的值的含义见下表

方法参数结果
len(s)string字符串的字节长度
[n]T *[n]T数组的长度(==n)
[]Tslice的长度
map[K][T]map的长度,即有多少个key-value对
chan T在channel里面有多少个等待接收的元素
cap(s)[n]T *[n]T数组长度(==n)
[]Tslice的capacity(预分配空间)
chan Tchannel的buffer的长度

len,cap的返回值满足如下条件:
0<=len(s)<=cap(s)
slice,map,channel的nil值的len为0
slice,channel的nil值的cap为0

new

new函数的参数是一个类型,返回一个指向该类型的指针,并且进行0值初始化

calltyperesult
make(T, n)slice创建一个T类型的slice且长度为n
make(T, n, m)slice创建一个T类型的slice且长度为n,capacity位m
make(T)map创建一个T类型的map
make(T, n)map创建一个T类型的map,且预分配n个空间
make(T)channel创一个channel
make(T, n)channel创建一个拥有n长度的buffer的channel

m>=n,且n和m必须是整型且不能为负数。

make

make也根据不同参数类型和参数个数具有不同的含义,见下表

append

append(s S, x …T) S
在slice后面追加元素,返回一个新的slice,新的slice可能指向不同的underlying array,所以调用append的时候一定要将其返回值赋值给slice,保证得到append之后的slice。
s = append(s, a)

copy

copy(dst, src, []T) int
copy(dst []byte, src string) int
copy返回拷贝的长度,会自动取最短的长度进行拷贝(min(len(src), len(dst)))

delete

删除一个map指定key的元素
delete(m, k)

panic,recover

panic(interface{})
直接调用panic或者是一个运行panic都会结束本次函数调用,函数中的defer将会被正常执行,panic如果不被recover将会导致程序崩溃
recover() interface{}
在defer的函数中调用recover,可以将调用defer的后面的函数体的panic恢复。

func protect(g func()) {
    defer func() {
        if x := recover(); x != nil {
            fmt.Println("run time panic:%v"x)
        }
    }()
    g()
}

上面的代码中,如果在函数g中发生panic,那么recover将会返回panic的参数,如果panic的参数不是nil的话,则会将panic的参数输出。并且这种情况下,程序将会继续执行,只是g函数中panic之后的代码会被跳过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值