Go語言09 函式

2021-10-08 18:38:53 字數 3580 閱讀 9581

函式是基本的**塊,用於執行乙個任務。

go 語言最少有個 main() 函式。

你可以通過函式來劃分不同功能,邏輯上每個函式執行的是指定的任務。

函式宣告告訴了編譯器函式的名稱,返回型別,和引數。

go 語言標準庫提供了多種可動用的內建的函式。例如,len() 函式可以接受不同型別引數並返回該型別的長度。如果我們傳入的是字串則返回字串的長度,如果傳入的是數字,則返回陣列中包含的函式個數。

go 語言函式定義格式如下:

func function_name( [parameter list] ) [return_types]
函式定**析:

以下例項為 max() 函式的**,該函式傳入兩個整型引數 num1 和 num2,並返回這兩個引數的最大值:

/* 函式返回兩個數的最大值 */

func max(num1, num2 int) int else

return result

}

當建立函式時,你定義了函式需要做什麼,通過呼叫改函式來執行指定任務。

呼叫函式,向函式傳遞引數,並返回值,例如:

package main

import "fmt"

func main()

//函式返回兩個數的最大值

func max(num1, num2 int) int else

return result

}

執行結果:

go 函式可以返回多個值,(這個語法很特別,和c、c++語言法完成不一樣)例如:

package main

import "fmt"

func swap(x, y string) (string, string)

func main()

執行結果:

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

形參就像定義在函式體內的區域性變數。

呼叫函式,可以通過兩種方式來傳遞引數:

傳遞型別

描述值傳遞

值傳遞是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。

引用傳遞

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

預設情況下,go 語言使用的是值傳遞,即在呼叫過程中不會影響到實際引數。

傳遞是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。

預設情況下,go 語言使用的是值傳遞,即在呼叫過程中不會影響到實際引數。

以下定義了 swap() 函式:

/* 定義相互交換值的函式 */

func swap(x, y int) int

接下來,讓我們使用值傳遞來呼叫 swap() 函式:

package main

import "fmt"

func main()

//定義相互交換值的函式

func swap(x, y int) int

執行結果

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

引用傳遞指標引數傳遞到函式內,以下是交換函式 swap() 使用了引用傳遞:

/* 定義交換值函式*/

func swap(x *int, y *int)

以下我們通過使用引用傳遞來呼叫 swap() 函式:

package main

import "fmt"

func main()

func swap(x *int, y *int)

執行結果:

函式用法

描述函式作為值

函式定義後可作為值來使用

閉包閉包是匿名函式,可在動態程式設計中使用

方法方法就是乙個包含了接受者的函式

go 語言可以很靈活的建立函式,並作為值使用。以下例項中我們在定義的函式中初始化乙個變數,該函式僅僅是為了使用內建函式 math.sqrt() ,例項為:

package main

import (

"fmt"

"math"

)func main()

//使用函式

fmt.println(getsquareroot(9))

}

執行結果:

go 語言支援匿名函式,可作為閉包。匿名函式是乙個"內聯"語句或表示式。匿名函式的優越性在於可以直接使用函式內的變數,不必申明。

以下例項中,我們建立了函式 getsequence() ,返回另外乙個函式。該函式的目的是在閉包中遞增 i 變數,**如下:

package main

import "fmt"

func getsequence() func() int

}func main()

執行結果:

go 語言中同時有函式和方法。乙個方法就是乙個包含了接受者的函式,接受者可以是命名型別或者結構體型別的乙個值或者是乙個指標。所有給定型別的方法屬於該型別的方法集。語法格式如下:

func (variable_name variable_data_type) function_name() [return_type]
下面定義乙個結構體型別和該型別的乙個方法:

package main

import "fmt"

//定義函式

type circle struct

func main()

//該 method 屬於 circle 型別物件中的方法

func (c circle) getarea() float64

執行結果:

參考:

Go語言核心程式設計 09Map

map是key value資料結構,又稱為字段或者關聯陣列。var a map string string var a map string int var a map int string var a map string map string string value也是乙個map packag...

Go語言 函式

函式是結構化程式設計的最小模組單元,使用關鍵字 func 定義函式。go語言定義函式的一些特點總結如下 無需前置宣告 不支援命名巢狀定義 不支援同名函式過載 不支援預設引數 支援不定長變參 支援多返回值 支援命名返回值 支援匿名函式和閉包 函式屬於第一類物件,具備相同簽名 引數及返回值型別 的視為同...

Go語言函式

go語言函式function go函式不支援巢狀 過載和預設引數 但支援以下特性 無需宣告原型 不定長度引數 多返回值 命名返回值引數 匿名函式 閉包 定義函式使用關鍵字func,且左大括號不能另起一行 函式也可以作為一種型別使用 不定引數 不定引數的傳遞 任意型別的不定引數 如果你希望傳任意型別的...