五、函数
函数基本语法:
func 函数名(形参列表)(返回值类型列表){
执行语句
return 返回值列表
}
1.
输出:
2.返回值可以是0个
输出:
3.返回值可以是多个
输出:
若我们只想要返回值中的一个,那么用_来匿名。
输出:
4.golang函数不支持重载(重载的意思就是函数名相同,形参列表不同)。
5.golang中支持可变参数,用...来表示。
输出:
6.基本数据类型和数组默认值传递,即进行值拷贝,在函数内部修改,不影响原来的值。
输出:
这是因为先执行main,当前mian中num1赋值为10,然后执行test函数,将test函数中num赋值为10,然后执行test函数中的num=30,此时num值变为30,即输出test-----30,执行完test函数,此test函数栈帧销毁,执行main函数中的输出,输出main---10。
7.以值传递方式的数据类型,如果希望在函数内部的变量修改函数外的变量,可以传入函数的地址&,函数内以指针方式操作,从效果来看类似引用传递。
输出:
在go中函数也是一种类型,可以赋给一个变量,则该变量就是一个函数类型的变量了,通过该变量恶意进行函数调用。
输出:
8.既然函数是一种类型,那么函数也可以作为形参
输出:
9.自定义数据类型:起别名,同理函数类型也可以起别名。
输出:
10.支持对函数返回值命名
输出:
11.导包
输出:
如果导包有问题可以参照(30条消息) 真正解决golang中的package is not in GOROOT报错_牛顿就是牛的博客-CSDN博客
同级别的源文件的包名必须一致。
包名与文件夹名可以不一致,但推荐是一致的。
12.defer关键字
在函数中,程序员经常需要创建资源,为了在函数执行完毕后即使释放资源,go的设计者提供defer关键字。
输出:
13.init函数
init函数比main函数更早执行
14.匿名函数:即没有函数名
另一种形式:
输出:
14.闭包 = 函数 + 引用环境
输出:
输出:
输出: