go語言呼叫函數方法是什麼

2022-12-01 22:01:24

在go語言中,定義了函數之後,我們可以通過「函數名()」的方式呼叫函數,語法「返回值變數列表 = 函數名(參數列)」。當「()」中包含多個引數時,引數變數以逗號分隔,尾部無須以分號結尾;「返回值變數列表」中,多個返回值使用逗號分隔。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

函數構成了程式碼執行的邏輯結構,在Go語言中,函數的基本組成為:關鍵字 func、函數名、參數列、返回值、函數體和返回語句,每一個程式都包含很多的函數,函數是基本的程式碼塊。

因為Go語言是編譯型語言,所以函數編寫的順序是無關緊要的,鑑於可讀性的需求,最好把 main() 函數寫在檔案的前面,其他函數按照一定邏輯順序進行編寫(例如函數被呼叫的順序)。

編寫多個函數的主要目的是將一個需要很多行程式碼的複雜問題分解為一系列簡單的任務來解決,而且,同一個任務(函數)可以被多次呼叫,有助於程式碼重用(事實上,好的程式是非常注意 DRY 原則的,即不要重複你自己(Don't Repeat Yourself),意思是執行特定任務的程式碼只能在程式裡面出現一次)。

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

Go語言裡面擁三種型別的函數:

  • 普通的帶有名字的函數
  • 匿名函數或者 lambda 函數
  • 方法

普通函數宣告(定義)

函數宣告包括函數名、形式參數列、返回值列表(可省略)以及函數體。

func 函數名(形式參數列)(返回值列表){
    函數體
}
登入後複製

形式參數列描述了函數的引數名以及引數型別,這些引數作為區域性變數,其值由引數呼叫者提供,返回值列表描述了函數返回值的變數名以及型別,如果函數返回一個無名變數或者沒有返回值,返回值列表的括號是可以省略的。

呼叫函數

函數在定義後,可以通過呼叫的方式,讓當前程式碼跳轉到被呼叫的函數中進行執行,呼叫前的函數區域性變數都會被儲存起來不會丟失,被呼叫的函數執行結束後,恢復到呼叫函數的下一行繼續執行程式碼,之前的區域性變數也能繼續存取。

函數內的區域性變數只能在函數體中使用,函數呼叫結束後,這些區域性變數都會被釋放並且失效。

Go語言的函數呼叫格式如下:

返回值變數列表 := 函數名(參數列)
登入後複製

下面是對各個部分的說明:

  • 函數名:需要呼叫的函數名。
  • 參數列:引數變數以逗號分隔,尾部無須以分號結尾。
  • 返回值變數列表:多個返回值使用逗號分隔。

例如,加法函數呼叫樣式如下:

result := add(1,1)
登入後複製

函數的返回值

Go語言支援多返回值,多返回值能方便地獲得函數執行後的多個返回引數,Go語言經常使用多返回值中的最後一個返回引數返回函數執行中可能發生的錯誤,範例程式碼如下:

conn, err := connectToNetwork()
登入後複製
登入後複製

在這段程式碼中,connectToNetwork 返回兩個引數,conn 表示連線物件,err 返回錯誤資訊。

其它程式語言中函數的返回值

  • C/C++ 語言中只支援一個返回值,在需要返回多個數值時,則需要使用結構體返回結果,或者在引數中使用指標變數,然後在函數內部修改外部傳入的變數值,實現返回計算結果,C++ 語言中為了安全性,建議在引數返回資料時使用「參照」替代指標。
  • C# 語言也沒有多返回值特性,C# 語言後期加入的 ref 和 out 關鍵字能夠通過函數的呼叫引數獲得函數體中修改的資料。
  • lua 語言沒有指標,但支援多返回值,在大塊資料使用時方便很多。

Go語言既支援安全指標,也支援多返回值,因此在使用函數進行邏輯編寫時更為方便。

1) 同一種型別返回值

如果返回值是同一種型別,則用括號將多個返回值型別括起來,用逗號分隔每個返回值的型別。

使用 return 語句返回時,值列表的順序需要與函數宣告的返回值型別一致,範例程式碼如下:

func typedTwoValues() (int, int) {
    return 1, 2
}
func main() {
    a, b := typedTwoValues()
    fmt.Println(a, b)
}
登入後複製
登入後複製

程式碼輸出結果:

1 2
登入後複製

純型別的返回值對於程式碼可讀性不是很友好,特別是在同型別的返回值出現時,無法區分每個返回引數的意義。

2) 帶有變數名的返回值

Go語言支援對返回值進行命名,這樣返回值就和引數一樣擁有引數變數名和型別。

命名的返回值變數的預設值為型別的預設值,即數值為 0,字串為空字串,布林為 false、指標為 nil 等。

下面程式碼中的函數擁有兩個整型返回值,函數宣告時將返回值命名為 a 和 b,因此可以在函數體中直接對函數返回值進行賦值,在命名的返回值方式的函數體中,在函數結束前需要顯式地使用 return 語句進行返回,程式碼如下:

func namedRetValues() (a, b int) {
    a = 1
    b = 2
    return
}
登入後複製
登入後複製

程式碼說明如下:

  • 第 1 行,對兩個整型返回值進行命名,分別為 a 和 b。
  • 第 3 行和第 4 行,命名返回值的變數與這個函數的佈局變數的效果一致,可以對返回值進行賦值和值獲取。
  • 第 6 行,當函數使用命名返回值時,可以在 return 中不填寫返回值列表,如果填寫也是可行的,下面程式碼的執行效果和上面程式碼的效果一樣。
    func namedRetValues() (a, b int) {
        a = 1
        return a, 2
    }
    登入後複製
    登入後複製

提示

同一種型別返回值和命名返回值兩種形式只能二選一,混用時將會發生編譯錯誤,例如下面的程式碼:

func namedRetValues() (a, b int, int)
登入後複製
登入後複製

編譯報錯提示:

mixed named and unnamed function parameters
登入後複製

意思是:在函數引數中混合使用了命名和非命名引數。

【相關推薦:Go視訊教學

以上就是go語言呼叫函數方法是什麼的詳細內容,更多請關注TW511.COM其它相關文章!