Go語言之函式的學習
阿新 • • 發佈:2018-12-10
GO語言 —–函式
A:單個返回值或者沒有返回值
func function_name
( [parameter list] ) 引數列表,不是必須的,但是不傳引數的時候必須有括號
[return_types] 返回引數,不是必須的
{
函式體
}
B:多個返回值,用括號 func function_name ( [parameter list] ) 引數列表,不是必須的,但是不傳引數的時候必須有括號 ([return_types]) 返回引數,不是必須的 { 函式體 }
1.func main() { /* 定義區域性變數 */ var a int = 100 var b int = 200 var ret int /* 呼叫函式並返回最大值 */ ret = max(a, b) fmt.Printf( "最大值是 : %d\n", ret ) } /* 函式返回兩個數的最大值 */ func max(num1, num2 int) int { /* 定義區域性變數 */ var result int if (num1 > num2) { result = num1 } else { result = num2 } return result }
2.函式傳入引數問題 1.正常傳輸引數 2.引用傳參 func swap(x *int, y *int) { var temp int temp = x / 保持 x 地址上的值 */ x = *y / 將 y 值賦給 x */ y = temp / 將 temp 值賦給 y */ } var a int = 100 var b int= 200
fmt.Printf("交換前,a 的值 : %d\n", a )
fmt.Printf("交換前,b 的值 : %d\n", b )
/* 呼叫 swap() 函式
* &a 指向 a 指標,a 變數的地址
* &b 指向 b 指標,b 變數的地址
*/
swap(&a, &b)
3.Go 語言支援匿名函式,可作為閉包。匿名函式是一個”內聯”語句或表示式。 匿名函式的優越性在於可以直接使用函式內的變數,不必申明。 package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 為一個函式,函式 i 為 0 */
nextNumber := getSequence()
/* 呼叫 nextNumber 函式,i 變數自增 1 並返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 建立新的函式 nextNumber1,並檢視結果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
輸出的結果是12312