虽然go语言有gc不需要我们手动回收不用的内存,但是仍然会有一些极端的情况:

比如这里,我们开了2M的空间,ret和arr都指向了这段空间,虽然ret只用了很小的一段空间,但由于仍然有slice指向了2M空间,内存就不会释放。
为了解决这种问题,我们可以重新开辟一块空间,然后返回:

go语言中的if语句和C/C++中相同,但是go语言中的if语句可以在if中定义变量或者常量,并且整个if语句(包括else if,else)块中都可以使用它们。

go语言中的switch也比C/C++中强大很多,go语言中的switch和case后面可以跟很多类型,比如常量、变量或函数表达式,甚至是结构体,只要它们表示的数据相同就行。

甚至switch为空也行,只要case是表达式:


Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,。fallthrough可以强制执行后面的case代码。
注意,此次执行不管case中的语句是否成立,都会执行。




for循环也和C/C++不一样,for循环中可以只保留条件表达式,这样就相当于C语言中的while循环

如果什么条件都不加,则是死循环:


其他的,比如break,continue,则和C/C++的用法一样,不再赘述。
这个和C/C++的goto语句用法相同,标记一个位置,然后用goto跳转。