十、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進行重複調用

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