1. 注意:
(1)函數名首字母小寫 : 爲private 函數名首字母大寫 : 爲public
2. 函數特點:
(1)go 函數不支持嵌套/函數重載/默認參數。
(2)go 支持 不定長變參 / 多返回值 / 命名返回值參數 / 匿名函數 / 閉包
(3)定義函數用func;函數也可以作爲一種數據類型來使用
3. 函數定義:
(1)無形參/無返回值:func funcName(){ }
(2) 有形參/無返回值 : func funcName( a int , b string , c bool){ }
(3) 有形參 / 有返回值 : func funcName(a , b , d int)(int , string , int ){ } // 形參 a , b , d全部是int 類型
如何接收多個返回值??? 變量 1 , 變量2 := funcName( );
如何接收多個返回值中的某些值??? _ , 變量 , _ , 變量 := funcName( );
_ 下劃線代表 忽略不接受某個返回值
func funcName(a int )int { } // 返回值是int類型
(4) 變參: func funcName( a int , b string , c ...int) { } // c爲一個數組,變參放到形參列表的後面
4、回調函數:
把一個函數當做另一個函數的參數
函數原型: funcName( a int , callbackFuncName func(int ,int) int, b int ) int { callbackFuncName(a,b); }
使用: funcName(2 , 函數名 ,23) ; 或者
funcName(12 , func(a int ,b int) int{ // 匿名函數
return a+b ;
} , 34) ;
如何獲取回調函數的函數名???
p := reflect . Valueof(callbackName) . Pointer(); // 獲取回調函數的指針
runtime . FuncForPC(p) . Name(); // 獲取回調函數的函數名
5、匿名函數:
沒有函數名的函數,稱之爲匿名函數
[ a := ] func(a ,b int) int { // 邏輯 }
a(12,23);