1.宣告語法
func 函式名 (引數串列) (回傳值) {
pass
}
1.func add() {
pass
}
2.func add(a int, b int) (int,int) {
pass
}
3.func add(a,b int,args...) int {
pass
}
4.匿名函式
func() {
fmt.Printf("func 1\n")
}()
func(x int) {
fmt.Printf("func 2, x is %d\n", x)
}(2)
a := func(a,b int) int {
return a+b
}(10,20)
5.函式可以作為變數賦值/作為引數傳入
1)作為變數賦值
func add(a,b int) int {
return a + b
}
func main() {
c := add
sum := c(10,20)
fmt.Println(sum) // 30
}
2)作為引數傳入
type add_func func(int , int) int //定義一種型別,add_func型別 引數兩個int變數回傳值為int
func add(a,b int) int {
return a + b
}
func operate(op add_func,a int, b int ) int {
return op(a+b)
}
func main(){
c := add
sum := operate(c,100,200)
fmt.Println(sum) //300
}
2.引數傳遞方式
1)值傳遞
2)參考傳遞 //值所在記憶體的地址
注意:
無論是值傳遞還是參考傳遞,傳遞給函式的都是變數的副本(也就是深copy一份傳遞過去),不過,值傳遞是值的拷貝,參考傳遞是地址的拷貝,
map、slice、chan、指標、interface默認為參考的方式傳遞
3.命名回傳值的名字:
package main
import "fmt"
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
return
}
func main() {
_, sum := calc(100, 200)
fmt.Println("sum=", sum)
}
4.defer用途
1)當函式回傳時,執行defer陳述句,
2)多個defer陳述句,按先進后出執行(實際是將defer陳述句的引數和資源壓堆疊,函式結束時根據出堆疊順序執行)
3)defer陳述句的變數,在defer宣告時就決定了
package main
import "fmt"
func main() {
i := 0
defer fmt.Println(i) //0
i = 10
fmt.Println(i) //10
/*
10
0
*/
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/33547.html
標籤:Go
上一篇:go: time包
下一篇:go:流程控制
