GO语言基础语法6 | 青训营笔记

83 阅读1分钟

go函数如果定义了返回的变量名,可以不用在显式return 对应变量名,直接return会返回对应变量。

当go函数体是arr ...type时,表示这里接受不定数量的type的参数,但是参数类型都是type。这时的arr是一个type类型的slice。

go函数传参默认是传入值的复制,即如果传入一个对象,则会调用此对象的拷贝构造函数,如果传入其他类型,则会申请一块内存空间放置此变量的拷贝。在函数内对此变量的修改不会在原变量生效。

如果要对原变量进行修改,则需要传入指针,格式是*type,虽然这样也会拷贝一次这个指针,但是是浅拷贝,两个指针指向的地址空间是相同的。而且用指针传递容量大的变量比较方便,因为可以节省掉拷贝需要的时间和空间开销。

而go的channel、slice、map在函数传参的时候不需要取地址后传递指针,可以直接传递。但是如果需要改变slice的长度还是需要传递slice的地址的。

go有一个很有意思的机制,defer。可以在一个函数内定义多个defer,这些语句在函数执行结束后会按照定义顺序逆序执行,然后函数返回。这样可以有效保证资源按时释放,不会引起内存泄露问题。