1. 程式人生 > >5 函數

5 函數

ack ont ice var 2個 ring 不支持 pan 練習

1 golang函數特點

  1.不支持重載,一個包中不能有2個同名的函數

  2.函數是一等公民,函數也是一種類型,一個函數可以賦值給變量

  3.匿名函數

  4.多返回值

2 函數參數傳遞方式

  1.值傳遞

  2.引用傳遞

  需要註意的是,無論是值傳遞還是引用傳遞,傳遞的的都是變量的副本,不過值傳遞是值的拷貝,引用傳遞是地址的拷貝,一般來說,地址拷貝更為高效,而值拷貝取決於拷貝的對象的大小,對象越大,則性能越低

  註意:map,slice,chan,指針,interface默認是引用方式傳遞

3 defer 在函數執行結束前執行,一般用於釋放資源

//defer:在函數執行結束前執行,一般用於釋放資源
func read() { conn,err := openConn() defer func(){ if conn!=nil{ conn.Close() } }() }

package main

import "fmt"

func main() {
    //fmt.Println(test05(10, 5))
    //fmt.Println(add2(1,2,3,4,5))
    fmt.Println(contact("hello"," ","world"))
}

//命名返回值的名字
func test05(a, b int
) (sum int) { sum = a + b return } //可變參數練習 func add2(a int, arg... int) (res int) { res += a for _, v := range arg { res += v } return } func contact(arg...string)(res string) { for _,v :=range arg{ res+=v } return } func test01(a int, b int) { } func test02(a
int, b int) int { return 1 } func test03(a int, b int) (int, int) { return 1, 1 } func test04(a, b int) (int, int) { return 1, 1 }

package main

import "fmt"

func main()  {
    var(
        a=5
        b=10
        c=add//函數賦值給變量
    )
    res := test(c,a,b)
    fmt.Println(res)
}


type add_func func(int,int) int

func add(a,b int) int{
    return a+b
}

func test(op add_func,a,b int) int{
    return op(a,b)
}

  

5 函數