三、Go的函數(shù)

三、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
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容