三、Go的函數(shù)
Go語言最少有一個(gè)main()
函數(shù)。
1、Go的函數(shù)定義:
func function_name( [parameter list] ) [return_types] {
//函數(shù)體
}
2、函數(shù)參數(shù)
函數(shù)如果使用參數(shù),該變量可稱為函數(shù)的形參。
形參就像定義在函數(shù)體內(nèi)的局部變量。
調(diào)用函數(shù)的兩種傳參方式
-
值傳遞
值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對(duì)參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。
func swap(x, y int) int { var temp int temp = x /* 保存 x 的值 */ x = y /* 將 y 值賦給 x */ y = temp /* 將 temp 值賦給 y*/ return temp; } swap(a, b)
-
引用傳遞
引用傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對(duì)參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。
func swap(x *int, y *int) { var temp int temp = *x /* 保持 x 地址上的值 */ *x = *y /* 將 y 值賦給 x */ *y = temp /* 將 temp 值賦給 y */ } /* 調(diào)用 swap() 函數(shù) * &a 指向 a 指針,a 變量的地址 * &b 指向 b 指針,b 變量的地址 */ swap(&a, &b)
3、函數(shù)的用法
-
函數(shù)作為值。
return math.Sqrt(x)
-
函數(shù)閉包
Go 語言支持匿名函數(shù),可作為閉包。匿名函數(shù)是一個(gè)"內(nèi)聯(lián)"語句或表達(dá)式。匿名函數(shù)的優(yōu)越性在于可以直接使用函數(shù)內(nèi)的變量,不必申明。
func getSequence() func() int { i:=0 return func() int { i+=1 return i } }
在函數(shù) getSequence() 返回另一個(gè)函數(shù)。
-
函數(shù)方法
Go 語言中同時(shí)有函數(shù)和方法。一個(gè)方法就是一個(gè)包含了接受者的函數(shù),接受者可以是命名類型或者結(jié)構(gòu)體類型的一個(gè)值或者是一個(gè)指針。所有給定類型的方法屬于該類型的方法集。
type Circle struct { radius float64 } //該 method 屬于 Circle 類型對(duì)象中的方法 func (c Circle) getArea() float64 { //c.radius 即為 Circle 類型對(duì)象中的屬性 return 3.14 * c.radius * c.radius }