1. 程式人生 > >Golang從入門到精通(十):Golang函式

Golang從入門到精通(十):Golang函式

函式

函式是結構化程式設計中最小的模組單元,日常開發過程中,將複雜的演算法過程分解為若干個小任務(程式碼塊),使程式的結構性更清晰,程式可讀性提升,易於後期維護和讓別人讀懂你的程式碼。編寫多個函式的主要目的是將一個需要很多行程式碼的複雜問題分解為一系列簡單的任務(那就是函式)來解決。在實際程式設計中,我們把重複性的任務抽象成一個函式。

和所有的程式語言一樣,Go語言支援各種風格的函式。在Go語言中,當函式執行到程式碼塊最後一行}之前或者return語句的時候會退出,其中 return 語句可以帶有零個或多個引數;這些引數將作為返回值供呼叫者使用。簡單的 return 語句也可以用來結束 for 死迴圈,或者結束一個Go協程(goroutine)

定義語法

Go語言中函式基本組成:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。

語法如下:

func 函式名(引數列表) (返回值列表) {
    // 函式體
}

這裡需要強調的是,Go語言函式的返回值型別和變數定義的資料型別一樣,都要遵循Go語言的“後置原則”放在後面,這一點和C語言函式定義有顯著不同。

另外,Go語言函式定義中如果引數列表中若干個相鄰引數的型別相同,則可以在引數列表中省略前面的變數型別宣告。

func Add(a, b int) int {        //這裡a和b都是int型別
    // 函式體
}

最後,Go語言函式定義中左花括號的位置被強制規範,如果左花括號放置不規範,golang編譯器會報編譯錯誤。

//錯誤!!!左括號必須緊跟在括號後面
func hello()
{               //左括號不能另起一行
}

多值返回

Go語言的函式可以返回不止一個結果,即支援“多值返回”。

Go語言函式多值返回一般用於處理錯誤。比如在IO操作時候,不一定每次都能成功:可能檔案不存在或者磁碟損壞無法讀取檔案。所以一般在函式呼叫發生錯誤時返回一個附加的結果作為錯誤值,習慣上將錯誤值作為最後一個結果返回。

func SumProductDiff(i, j int) (int, int, int) {
    return i+j, i*j, i-j
}

不定引數

如果你對Python比較熟悉,你會知道Python函式引數個數可以是不確定的。和Python類似,Go語言函式也支援可變的引數個數。

在引數列表的最後型別名稱前面使用省略號“…”來表示宣告一個變長函式,呼叫該函式的時候可以傳遞該型別任意數目的引數。

func 函式名(args ...Type) (返回值列表) {
    // 函式體
}

程式碼示例

我們在這裡寫三個函式,依次展示出函式最常態模樣,多值返回和不定引數。

package main

import(
    "fmt"
)


func Add(i int, j int) (int) {  //常規函式
    return i+j
}
func Add_Multi_Sub(i, j int) (int, int, int) {  //多值返回
    return i+j, i*j, i-j
}

func sum(nums ...int) { //變參函式
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main(){
    a, b := 2,3
    arr := []int{1, 2, 3}
    var c int = Add(a,b)
    d,e,f := Add_Multi_Sub(a,b)
    fmt.Println(c,d,e,f)
    sum(arr...)  //注意傳參形式

}