5 函數
阿新 • • 發佈:2018-10-29
ack ont ice var 2個 ring 不支持 pan 練習
1 golang函數特點
1.不支持重載,一個包中不能有2個同名的函數
2.函數是一等公民,函數也是一種類型,一個函數可以賦值給變量
3.匿名函數
4.多返回值
2 函數參數傳遞方式
1.值傳遞
2.引用傳遞
需要註意的是,無論是值傳遞還是引用傳遞,傳遞的的都是變量的副本,不過值傳遞是值的拷貝,引用傳遞是地址的拷貝,一般來說,地址拷貝更為高效,而值拷貝取決於拷貝的對象的大小,對象越大,則性能越低
註意:map,slice,chan,指針,interface默認是引用方式傳遞
3 defer 在函數執行結束前執行,一般用於釋放資源
//defer:在函數執行結束前執行,一般用於釋放資源func read() { conn,err := openConn() defer func(){ if conn!=nil{ conn.Close() } }() }
package main import "fmt" func main() { //fmt.Println(test05(10, 5)) //fmt.Println(add2(1,2,3,4,5)) fmt.Println(contact("hello"," ","world")) } //命名返回值的名字 func test05(a, b int) (sum int) { sum = a + b return } //可變參數練習 func add2(a int, arg... int) (res int) { res += a for _, v := range arg { res += v } return } func contact(arg...string)(res string) { for _,v :=range arg{ res+=v } return } func test01(a int, b int) { } func test02(aint, b int) int { return 1 } func test03(a int, b int) (int, int) { return 1, 1 } func test04(a, b int) (int, int) { return 1, 1 }
package main import "fmt" func main() { var( a=5 b=10 c=add//函數賦值給變量 ) res := test(c,a,b) fmt.Println(res) } type add_func func(int,int) int func add(a,b int) int{ return a+b } func test(op add_func,a,b int) int{ return op(a,b) }
5 函數