go 函數 學習筆記

什麼是函數

有輸入、輸出,用來執行特定功能的代碼塊

func functionnname([partmeternam type]) [return type] {
  // function body
}


函數的幾種類型


  • 無參數返回值的函數

  • 有參數返回值的函數 

  • defer 語句 


1、無參數返回值的函數


package main
import "fmt"


func functiontest1(a,b int) int  {
    return a + b 
    // 輸出 15
}

func main()  {
    sum1 :=functiontest1(12,3)
    fmt.Println(sum1)
}

 2、有參數返回值的函數

  多返回值


package main
import "fmt"

func functiontest2(a,b int) (int,int) {
    sum := a + b 
    sub := a - b
    return sum,sub
}

func main()  {
    sum,sub := functiontest2(13,4)
    fmt.Printf("sum=%d\n sub=%d",sum,sub)
    // 輸出
    sum=17
    sub=9
}


對返回值進行命名

package main
import "fmt"

func functiontest3(a,b int) (sum int,sub int) {
    sum = a + b 
    sub = a - b
    return 
}

func main()  {
  
    sum,sub := functiontest3(30,40)
    fmt.Printf("sum=%d\n sub=%d",sum,sub)
    // 輸出 
  sum=70
  sub=-10

}

 _標識符  不需要輸出的可以使用 _ 表示

package main
import "fmt"

func functiontest4(a,b int) (sum int,sub int) {
    sum = a + b 
    sub = a - b
    return 
    
}

func main()  {
   sum,_ := functiontest4(21,10)
    fmt.Printf("sum=%d",sum)
    // 輸出
    sum=31    
}


可變參數1 ,傳遞數組args 

func functiontest5(a...int) (sum int)  {

    for i := 0; i < len(a); i++ {
        sum =sum + a[i]
    }
    fmt.Println(sum)
    return sum
    
}

func main()  {

functiontest5(11,12,9)
// 輸出 32

}


可變參數2 

package main
import "fmt"

func functiontest6(a int, b ...int) (sum int, sub int) {
    s1 := 0
    for i := 0; i < len(b); i++ {
        s1 = s1 + b[i]
    }
    sum = s1 + a 
    sub = s1 - a 
    return sum,sub
}

func main()  {
sum,sub := functiontest6(1,2,311,4)
fmt.Println(sum,sub)
// 輸出
318 316
}
  • defer 

defer 的作用: 在函數中,程序員經常需要創建資源(比如:數據庫連接、文件句柄、鎖等,爲了在函數執行完 畢後,及時的釋放資源,Go 的設計者提供 defer (延時機制)


單個defer  先進後出

package main
import "fmt"

func defer_test1(a int ,b...int) (sum int,sub int) {
    defer fmt.Println("deffer")
   for i := 0; i < len(b); i++ {
       fmt.Println(b[i])
   }
  return
}

func main()  {

defer_test1(1,123,23,45,6)
// 輸出
123
23
45
6
deffer
}

多個deffer 

func defer_test1(a int ,b...int) (sum int,sub int) {
    defer fmt.Println("deffer1")
    defer fmt.Println("deffer2")
    defer fmt.Println("deffer3")
   for i := 0; i < len(b); i++ {
       fmt.Println(b[i])
   }
  return
}

func main()  {

defer_test1(1,123,23,45,6)
// 輸出
123
23
45
6
deffer3
deffer2
deffer1

}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章