1. 程式人生 > >Go語言之函式的學習

Go語言之函式的學習

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