首頁 > 後端開發 > Golang > 主體

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

青灯夜游
發布: 2022-12-01 19:32:00
原創
6789 人瀏覽過

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

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

本教學操作環境: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語言呼叫函數方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板