go语言中函数使用的注意事项和细节

1、函数的形参列表可以是多个,返回值列表也可以是多个。

2、形参列表和返回值列表的数据类型可以是值类型和引用类型。

3、函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本包文件和其他包文件使用,类似public,首字母小写,只能被本包文件使用,类似private。

4、函数中的变量是局部的,函数外不生效。

5、基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。

6、如果希望函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果上看类似引用。

7、Go函数不支持函数重载。

如下图所示,有两个函数名称都为test02,但两个函数的形参不同,在其他语言如C++中是支持这种写的,c++编译器会将这两个函数看做是不同的函数。而在go语言中,这种写法是错误的。

go语言不支持重载

因为go语言中是支持可变参数的,而且还有空接口,完全可以达到"函数重载"的效果。

8、在Go语言中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量也可以对函数进行调用。

示例如下:

将函数类型赋值给变量

输出为:

输出

可以发现a的类型和函数getSum的类型是一样的,都是函数类型func<int, int> int,而且用a就可进行函数的调用。

9、函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用。

案例如下所示:

函数作为形参使用

10、为了简化数据类型定义,Go支持自定义数据类型。

基本语法如下:

type 自定义数据类型名 数据类型    //相当于一个别名

类似C语言中的typedef的用法。

下面有两个用法案例:

type的用法

实际例程如下:

type的用法例程

输出如下:

输出num1

但是要注意上面注释的那段话:

go中myInt和int虽然都是int类型,但是go认为myInt和int是两个类型。

测试如下:

测试

我们会发现,将myInt类型的num1赋值给int类型的num2时报错了

错误信息

要解决这个问题,可以对num1进行显式类型转换,将myInt转换成int,如下所示:

类型转换

这样就不会报错了。

11、Go语言支持对函数返回值命名。

如下例程。需要注意,编译器在调用getSumAndSub函数时,已经将sum和sub这两个返回值变量创建好了。

返回值命名

这里return也不需要用"return sum, sub"这种写法了,因为这是直接用返回值sum和sub进行运算的,跟返回顺序都没关系。

12、使用_标识符,忽略返回值。

例程如下:

_例程

cal函数有两个返回值sum和sub。

在main函数中调用时,若你只想要函数返回值其中的一个,只需要用一个变量res1来接收你想要的返回值,用"_"标识符来“接收”另一个返回值即可。

13、Go支持可变参数

说明如下:

可变参数的说明

题(2)的案例代码如下:

案例代码

代码中标红处表示sum函数中的参数,有一个int型的变量n1,另有一个[]int型的切片args。

args类型

案例代码的输出为:

案例代码的输出

可以看出sum函数可以求出一到多个int元素的和。但是要注意,参数列表中固定的元素只能放在前面,可变形参(切片)只能放在最后。如果args没有放在末尾就会报错,如下所示:

可变形参倒置报错
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容