在go語言中,定義了函數之後,我們可以透過「函數名稱()」的方式呼叫函數,語法「返回值變數列表 = 函數名稱(參數列表)」。當「()」包含多個參數時,參數變數以逗號分隔,尾部無須以分號結尾;「返回值變數清單」中,多個返回值使用逗號分隔。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
函數構成了程式碼執行的邏輯結構,在Go語言中,函數的基本組成是:關鍵字func、函數名、參數列表、回傳值、函數體和回傳語句,每一個程式都包含很多的函數,函數是基本的程式碼區塊。
因為Go語言是編譯型語言,所以函數寫的順序是無關緊要的,鑑於可讀性的需求,最好把main() 函數寫在檔案的前面,其他函數依照一定邏輯順序進行編寫(例如函數被呼叫的順序)。
編寫多個函數的主要目的是將一個需要很多行程式碼的複雜問題分解為一系列簡單的任務來解決,而且,同一個任務(函數)可以被多次調用,有助於程式碼重用(事實上,好的程式是非常注意DRY 原則的,即不要重複你自己(Don't Repeat Yourself),意思是執行特定任務的程式碼只能在程式裡面出現一次)。
當函數執行到程式碼區塊最後一行 }
之前或return 語句的時候會退出,其中return 語句可以帶有零個或多個參數,這些參數將作為回傳值供呼叫者使用,簡單的return 語句也可以用來結束for 的死循環,或是結束一個協程(goroutine)。
Go語言裡面有三種類型的函數:
函數宣告包含函數名稱、形式參數清單、傳回值清單(可省略)、函數體。
func 函数名(形式参数列表)(返回值列表){ 函数体 }
形式參數清單描述了函數的參數名稱以及參數類型,這些參數作為局部變量,其值由參數呼叫者提供,返回值列表描述了函數返回值的變數名稱以及類型,如果函數傳回一個無名變數或沒有回傳值,回傳值清單的括號是可以省略的。
函數在定義後,可以透過呼叫的方式,讓目前程式碼跳到被呼叫的函數中執行,呼叫前的函數局部變數都會被保存起來不會遺失,被呼叫的函數運行結束後,恢復到呼叫函數的下一行繼續執行程式碼,之前的局部變數也能繼續存取。
函數內的局部變數只能在函數體中使用,函數呼叫結束後,這些局部變數都會被釋放並且失效。
Go語言的函數呼叫格式如下:
返回值变量列表 := 函数名(参数列表)
下面是對各個部分的說明:
例如,加法函數呼叫樣式如下:
result := add(1,1)
Go語言支援多重傳回值,多回傳值能方便地獲得函數執行後的多個返回參數,Go語言經常使用多返回值中的最後一個返回參數返回函數執行中可能發生的錯誤,示例代碼如下:
conn, err := connectToNetwork()
在这段代码中,connectToNetwork 返回两个参数,conn 表示连接对象,err 返回错误信息。
Go语言既支持安全指针,也支持多返回值,因此在使用函数进行逻辑编写时更为方便。
如果返回值是同一种类型,则用括号将多个返回值类型括起来,用逗号分隔每个返回值的类型。
使用 return 语句返回时,值列表的顺序需要与函数声明的返回值类型一致,示例代码如下:
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 return a, 2 }
同一种类型返回值和命名返回值两种形式只能二选一,混用时将会发生编译错误,例如下面的代码:
func namedRetValues() (a, b int, int)
编译报错提示:
mixed named and unnamed function parameters
意思是:在函数参数中混合使用了命名和非命名参数。
【相关推荐:Go视频教程】
以上是go語言呼叫函數方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!