天天看點

Go語言學習心得--Go語言的函數(二)

之前說過Go語言的函數了,這次剖析一下這個Go的函數參數

函數如果使用參數,該變量可稱為函數的形參。

形參就像定義在函數體内的局部變量。

調用函數,可以通過兩種方式來傳遞參數:

第一種是值傳遞:

所謂的值傳遞是指在調用函數時将實際參數複制一份傳遞到函數中,這樣在函數中如果對參數進行修改,将不會影響到實際參數。

第二種是引用傳遞:

而引用傳遞是指在調用函數時将實際參數的位址傳遞到函數中,那麼在函數中對參數所進行的修改,将影響到實際參數。

我們可以寫個Demo來測試一下這個值傳遞

Go語言學習心得--Go語言的函數(二)

Demo運作結果如下

Go語言學習心得--Go語言的函數(二)

程式中使用的是值傳遞, 是以兩個值并沒有實作互動,我們可以使用 引用傳遞 來實作交換效果。

Go 語言函數引用傳遞值

引用傳遞是指在調用函數時将實際參數的位址傳遞到函數中,那麼在函數中對參數所進行的修改,将影響到實際參數。

寫個測試搞一下試試

Go語言學習心得--Go語言的函數(二)

看,這次傳遞值就過去了

Go語言學習心得--Go語言的函數(二)
預設情況下,Go 語言使用的是值傳遞,即在調用過程中不會影響到實際參數。
           

還有就是 函數定義後可作為值來使用

Go 語言可以很靈活的建立函數,并作為值使用。以下執行個體中我們在定義的函數中初始化一個變量,該函數僅僅是為了使用内置函數 math.sqrt()

Demo執行個體

Go語言學習心得--Go語言的函數(二)

Demo結果

Go語言學習心得--Go語言的函數(二)

sqrt() 這個方法就是和JAVA中類似的那個 求平方根的那個

而且Go語言同時也是支援匿名函數的,和JAVA中的匿名方法似的。

Go 語言支援匿名函數,可作為閉包。匿名函數是一個"内聯"語句或表達式。匿名函數的優越性在于可以直接使用函數内的變量,不必申明。

以下執行個體中,我們建立了函數 getSequence() ,傳回另外一個函數。該函數的目的是在閉包中遞增 i 變量,

Go語言學習心得--Go語言的函數(二)

看執行結果

Go語言學習心得--Go語言的函數(二)

接下來我們在看看 Go 語言函數方法

Go 語言中同時有函數和方法。一個方法就是一個包含了接受者的函數,接受者可以是命名類型或者結構體類型的一個值或者是一個指針。所有給定類型的方法屬于該類型的方法集。

文法格式如下:

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函數體*/
}
           

下面我們用一個Demo來示範一下

Go語言學習心得--Go語言的函數(二)

執行結果示範

Go語言學習心得--Go語言的函數(二)