您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“go語言怎么調用函數”,內容詳細,步驟清晰,細節處理妥當,希望這篇“go語言怎么調用函數”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在go語言中,定義了函數之后,我們可以通過“函數名()”的方式調用函數,語法“返回值變量列表 = 函數名(參數列表)”。當“()”中包含多個參數時,參數變量以逗號分隔,尾部無須以分號結尾;“返回值變量列表”中,多個返回值使用逗號分隔。
函數構成了代碼執行的邏輯結構,在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()
conn, err := connectToNetwork()
在這段代碼中,connectToNetwork 返回兩個參數,conn 表示連接對象,err 返回錯誤信息。
C/C++ 語言中只支持一個返回值,在需要返回多個數值時,則需要使用結構體返回結果,或者在參數中使用指針變量,然后在函數內部修改外部傳入的變量值,實現返回計算結果,C++ 語言中為了安全性,建議在參數返回數據時使用“引用”替代指針。
C# 語言也沒有多返回值特性,C# 語言后期加入的 ref 和 out 關鍵字能夠通過函數的調用參數獲得函數體中修改的數據。
lua 語言沒有指針,但支持多返回值,在大塊數據使用時方便很多。
Go語言既支持安全指針,也支持多返回值,因此在使用函數進行邏輯編寫時更為方便。
如果返回值是同一種類型,則用括號將多個返回值類型括起來,用逗號分隔每個返回值的類型。
使用 return 語句返回時,值列表的順序需要與函數聲明的返回值類型一致,示例代碼如下:
復制純文本復制
func typedTwoValues() (int, int) {
return 1, 2
}
func main() {
a, b := typedTwoValues()
fmt.Println(a, b)
}
func typedTwoValues() (int, int) {
return 1, 2
}
func main() {
a, b := typedTwoValues()
fmt.Println(a, b)
}
代碼輸出結果:
1 2
純類型的返回值對于代碼可讀性不是很友好,特別是在同類型的返回值出現時,無法區分每個返回參數的意義。
Go語言支持對返回值進行命名,這樣返回值就和參數一樣擁有參數變量名和類型。
命名的返回值變量的默認值為類型的默認值,即數值為 0,字符串為空字符串,布爾為 false、指針為 nil 等。
下面代碼中的函數擁有兩個整型返回值,函數聲明時將返回值命名為 a 和 b,因此可以在函數體中直接對函數返回值進行賦值,在命名的返回值方式的函數體中,在函數結束前需要顯式地使用 return 語句進行返回,代碼如下:
復制純文本復制
func namedRetValues() (a, b int) {
a = 1
b = 2
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) {
a = 1
return a, 2
}
同一種類型返回值和命名返回值兩種形式只能二選一,混用時將會發生編譯錯誤,例如下面的代碼:
復制純文本復制
func namedRetValues() (a, b int, int)
func namedRetValues() (a, b int, int)
編譯報錯提示:
mixed named and unnamed function parameters
意思是:在函數參數中混合使用了命名和非命名參數。
讀到這里,這篇“go語言怎么調用函數”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。