十、GO语言的函数

1.在调用一个函数时,会给该函数分配一个新的空间,编译器会通过自身的处理让这个新的空间其他的只爱栈空间区分开来

2.在每个函数对应的栈中,数据空间是独立的,不会混淆

3.当一个函数调用完毕,程序会自动销毁对应这个函数的栈空间(函数内部的一些变量也会随之消失)

4.函数的形参列表可以是多个,返回值列表也可以是多个

5.形参列表和返回值列表的数据可以是值类型和引用类型

  不管是值传递还是引用传递,传递给函数的都是变量的副本,不同的是,值传递的是值的拷贝,引用传递是地址的拷贝,一般来说,地址拷贝效率高,因为数据量小(只有一个内存地址:指针),而值拷贝决定拷贝的数据大小,数据越大,效率越低

  值类型:基本数据类型int系列,float系列,bool,string、数组和结构体truct

  引用类型:指针、slice切片、map、管道chan、interface等

6.函数名开头字母大写则可以被外部调用,小写则只能内部使用

7.函数中的变量是局部的,函数外不生效

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

9.如果希望函数内的变量能修改函数外的变量,可以传入变量的地址“&”,函数内以指针的方式操作变量

10.GO函数不支持重载

11.在GO中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量。通过该变量可以调用对应函数

12.函数既然是一种数据类型,因此在GO中函数可以作为形参,并且在内部进行调用

13.为了简化数据类型定义,GO支持自定义数据类型

   基本语法:type 自定义数据类型名  数据类型  //相当于给数据类型定义了一个别名

   案例:type myInt int //这时myInt就等价于Int

   案例:type mySum func(int,int)int //这时mySum就等价于一个函数类型func(int,int)int

14.支持对函数返回值命名

 

该函数在返回值中定义了sum,sub

函数内部可直接使用这两个变量,

函数最后只需要return即可,函数会自动讲两个变量返回

15.init函数,每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被GO运行框架调用,也就是说init会在main函数前被调用。

 

 输出结果:

 

16.如果一个文件同时包含全局变量定义,init函数和main函数,则执行的流程是变量定义=》init函数=>main函数,init函数最主要的作用就是完成一些初始化工作

 

 输出结果:

 

因为全局变量的值是test函数,所以test函数会被优先执行

17.如果主文件中有引用子文件,那么执行顺序也是优先执行子文件的全局变量,init,main然后再执行主文件的全局变量,init,main

18.GO语言支持匿名函数,如果某个函数只希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用

 

定义一个匿名函数同时复制给a,则可以通过a进行重复调用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章