定義方式如下:
func
funcname
([parameter list]
)[returntypes]
其中返回值型別和引數都是可選的
go語言不支援預設值引數
不支援函式過載
不支援命名函式的巢狀定義,但支援巢狀匿名函式
舉例:
func
getsum
(num1 int
,num2 int
)int
//也可以定義為如下格式,引數相同型別省略掉前邊的,編譯器自動推斷
func
getsum1
(num1, num2 int
)int
go函式實參到形參永遠是值拷貝,所以實現引用傳遞可以通過傳遞指標變數的方式
func
paramfunc
(a int
, b *
int, c [
]int
)func
main()
paramfunc
(a,&b, c)
fmt.
println
("main:"
) fmt.
println
(a) fmt.
println
(b) fmt.
println
(c)}
/*輸出
paramfunc:
100100
[1 100 3]
main:
1100
[1 100 3]
*/
go語言中支援變長引數。
注意:
func
main()
x :=
min(slice...
) fmt.
printf
("the minimum is: %d"
, x)
}func
min(s ...
int)
int min := s[0]
for_
, v :=
range s
}return min
}
go 函式支援多值返回,定義多值返回的返回引數列表時要使用「()」包裹,支援命名引數
的返回。
func
swap
(a,b int)(
int,
int)
若返回結果與乙個錯誤值,這樣可以使函式的呼叫者很方便的知道函式是否執行成功,這樣的模式也被稱為command,ok模式,未來的程式設計中也推薦使用這種方式。
func
div(a, b float64)(
float64
,error
)return a / b,
nil}
func
main()
fmt.
println
("result: "
, result)
}
在go語言中還可以給返回值命名,當需要返回的時候,只需要一條簡單的不帶引數的return語句
func
div(a, b float64
)(result float64
, err error
) result = a / b
return
}
即使只有乙個命名返回值,也需要使用()
括起來
匿名函式如其名字一樣,是乙個沒有名字的函式,除了沒有名字外其他地方與正常函式相同。匿名函式可以直接呼叫,儲存到變數,作為引數或者返回值。
package main
import
"fmt"
//匿名函式被直接賦值函式交量
var sum=
func
(a , b int
)int
func
doinput
(f func
(int
,int
)int
, a , b int
)int
//匿名函式作為返回值
func
wrap
(op string
)func
(int
,int
)int
case
"sub"
:return
func
(a , b int
)int
default
:return
nil}
}func
main()
}()sum(1
,2)//匿名函式作為實參
out :=
doinput
(func
(x, y int
)int,1
,2) opfunc :=
wrap
("add"
) re :=
opfunc(2
,3) fmt.
println
(out)
//3 fmt.
println
(sum(1
,2))
//3 fmt.
printf
("%d\n"
, re)
//5}
閉包可以解釋為乙個函式與這個函式外部變數的乙個封裝。粗略的可以理解為乙個類,類裡面有變數和方法,其中閉包所包含的外部變數對應著類中的靜態變數。為什麼這麼理解,先看乙個例子:
func
add(
)func
(int
)int
}func
main()
/*輸出
string1 11
string12 13
string123 16
string1 11
string12 13
string123 16
*/
解釋:
閉包實現斐波那契數列:
package main
import
"fmt"
func
fib(
)func()
int}
func
main()
}
Go語言函式式程式設計
更加嚴格的定義 函式體中包含自有變數和區域性變數 func adder func int int 這裡的sum就是自由變數,v是區域性變數。在cpp中同樣支援閉包 auto adder 在python中也是支援的 def adder sum 0 deff value nonlocal sumsum ...
Go函式學習
1 package main23 import 4 fmt 5 reflect 6 runtime 7 math 8 910 函式11 函式可以返回兩個值。返回多個值時可以起名字 12 返回值型別寫在最後面 13 函式可以作為引數 14 沒有預設引數,可選引數 1516 func eval a,b ...
《Go語言程式設計》學習筆記
1.變數 var v1 int var v2 string var v3 10 int 陣列 var v4 int 陣列切片 var v5 struct var v6 int 指標 var v7 map string int map,key為string型別,value為int型別 var v8 f...