golang函數(shù)的返回值實(shí)現(xiàn)
函數(shù)可以有0或多個返回值,返回值需要指定數(shù)據(jù)類型,返回值通過return關(guān)鍵字來指定。
- return可以有參數(shù),也可以沒有參數(shù),這些返回值可以有名稱,也可以沒有名稱。go中的函數(shù)可以有多個返回值。
- return關(guān)鍵字中指定了參數(shù)時,返回值可以不用名稱。如果return省略參數(shù),則返回值部分必須帶名稱
- 當(dāng)返回值有名稱時,必須使用括號包圍,逗號分隔,即使只有一個返回值
- 但即使返回值命名了,return中也可以強(qiáng)制指定其它返回值的名稱,也就是說return的優(yōu)先級更高
- 命名的返回值是預(yù)先聲明好的,在函數(shù)內(nèi)部可以直接使用,無需再次聲明。命名返回值的名稱不能和函數(shù)參數(shù)名稱相同,否則報錯提示變量重復(fù)定義
- return中可以有表達(dá)式,但不能出現(xiàn)賦值表達(dá)式,這和其它語言可能有所不同。例如return a+b是正確的,但return c=a+b是錯誤的。
go語言函數(shù)返回值實(shí)例
沒有返回值
func f1() { fmt.Printf("我沒有返回值,只是進(jìn)行一些計算") }
有一個返回值
func sum(a int, b int) (ret int) { ret = a + b return ret }
多個返回值,且在return中指定返回的內(nèi)容
func f2() (name string, age int) { name = "老郭" age = 30 return name, age }
多個返回值,返回值名稱沒有被使用
func f3() (name string, age int) { name = "老郭" age = 30 return // 等價于return name, age }
return覆蓋命名返回值,返回值名稱沒有被使用
func f4() (name string, age int) { n := "老郭" a := 30 return n, a }
Go中經(jīng)常會使用其中一個返回值作為函數(shù)是否執(zhí)行成功、是否有錯誤信息的判斷條件。例如return value,exists、return value,ok、return value,err等。
當(dāng)函數(shù)的返回值過多時,例如有4個以上的返回值,應(yīng)該將這些返回值收集到容器中,然后以返回容器的方式去返回。例如,同類型的返回值可以放進(jìn)slice中,不同類型的返回值可以放進(jìn)map中。
但函數(shù)有多個返回值時,如果其中某個或某幾個返回值不想使用,可以通過下劃線_來丟棄這些返回值。例如下面的f1函數(shù)兩個返回值,調(diào)用該函數(shù)時,丟棄了第二個返回值b,只保留了第一個返回值a賦值給了變量a。
package main import "fmt" func f1() (int, int) { return 1, 2 } func main() { _, x := f1() fmt.Printf("x: %v\n", x) }
運(yùn)行結(jié)果
[Running] go run "d:\SynologyDrive\軟件開發(fā)\go\golang入門到項(xiàng)目實(shí)戰(zhàn)\goproject\360duote.com\pro01\test.go"
x: 2
到此這篇關(guān)于golang函數(shù)的返回值實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang函數(shù)返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang實(shí)現(xiàn)HTTP編程請求和響應(yīng)
本文主要介紹了Golang實(shí)現(xiàn)HTTP編程請求和響應(yīng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08深入分析golang多值返回以及閉包的實(shí)現(xiàn)
相對于C/C++,golang有很多新穎的特性,例如goroutine,channel等等,這些特性其實(shí)從golang源碼是可以理解其實(shí)現(xiàn)的原理。今天這篇文章主要來分析下golang多值返回以及閉包的實(shí)現(xiàn),因?yàn)檫@兩個實(shí)現(xiàn)golang源碼中并不存在,我們必須從匯編的角度來窺探二者的實(shí)現(xiàn)。2016-09-09go責(zé)任鏈行為型設(shè)計模式Chain?Of?Responsibility
這篇文章主要為大家介紹了go行為型設(shè)計模式之責(zé)任鏈Chain?Of?Responsibility使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Go語言字典(map)用法實(shí)例分析【創(chuàng)建,填充,遍歷,查找,修改,刪除】
這篇文章主要介紹了Go語言字典(map)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Go語言字典的創(chuàng)建、填充、遍歷、查找、修改、刪除等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02Go語言中的init函數(shù)特點(diǎn)及用法詳解
在Go語言中,init()函數(shù)是一種特殊的函數(shù),用于在程序啟動時自動執(zhí)行一次。它的存在為我們提供了一種機(jī)制,可以在程序啟動時進(jìn)行一些必要的初始化操作,為程序的正常運(yùn)行做好準(zhǔn)備,在這篇文章中,我們將詳細(xì)探討init()函數(shù)的特點(diǎn)、用途和注意事項(xiàng)2023-06-06golang將切片或數(shù)組根據(jù)某個字段進(jìn)行分組操作
這篇文章主要介紹了golang將切片或數(shù)組根據(jù)某個字段進(jìn)行分組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12