![5.1Go語言函數(shù)聲明(函數(shù)定義)_第1頁](http://file4.renrendoc.com/view/0d0efdbfe4e4fe98fbcdb9ba54904a25/0d0efdbfe4e4fe98fbcdb9ba54904a251.gif)
![5.1Go語言函數(shù)聲明(函數(shù)定義)_第2頁](http://file4.renrendoc.com/view/0d0efdbfe4e4fe98fbcdb9ba54904a25/0d0efdbfe4e4fe98fbcdb9ba54904a252.gif)
![5.1Go語言函數(shù)聲明(函數(shù)定義)_第3頁](http://file4.renrendoc.com/view/0d0efdbfe4e4fe98fbcdb9ba54904a25/0d0efdbfe4e4fe98fbcdb9ba54904a253.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
5.1Go語?函數(shù)聲明(函數(shù)定義)函數(shù)構(gòu)成了代碼執(zhí)?的邏輯結(jié)構(gòu),在Go語?中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語句,每?個程序都包含很多的函數(shù),函數(shù)是基本的代碼塊。因為Go語?是編譯型語?,所以函數(shù)編寫的順序是?關(guān)緊要的,鑒于可讀性的需求,最好把main()函數(shù)寫在?件的前?,其他函數(shù)按照?定邏輯順序進?編寫(例如函數(shù)被調(diào)?的順序)。編寫多個函數(shù)的主要?的是將?個需要很多?代碼的復雜問題分解為?系列簡單的任務來解決,?且,同?個任務(函數(shù))可以被多次調(diào)?,有助于代碼重?(事實上,好的程序是?常注意DRY原則的,即不要重復你??(Don’tRepeatYourself),意思是執(zhí)?特定任務的代碼只能在程序??出現(xiàn)?次)。當函數(shù)執(zhí)?到代碼塊最后??}之前或者return語句的時候會退出,其中return語句可以帶有零個或多個參數(shù),這些參數(shù)將作為返回值供調(diào)?者使?,簡單的return語句也可以?來結(jié)束for的死循環(huán),或者結(jié)束?個協(xié)程(goroutine)。Go語???擁三種類型的函數(shù):普通的帶有名字的函數(shù)匿名函數(shù)或者lambda函數(shù)?法普通函數(shù)聲明(定義)函數(shù)聲明包括函數(shù)名、形式參數(shù)列表、返回值列表(可省略)以及函數(shù)體。func函數(shù)名(形式參數(shù)列表)(返回值列表){函數(shù)體}形式參數(shù)列表描述了函數(shù)的參數(shù)名以及參數(shù)類型,這些參數(shù)作為局部變量,其值由參數(shù)調(diào)?者提供,返回值列表描述了函數(shù)返回值的變量名以及類型,如果函數(shù)返回?個?名變量或者沒有返回值,返回值列表的括號是可以省略的。如果?個函數(shù)聲明不包括返回值列表,那么函數(shù)體執(zhí)?完畢后,不會返回任何值,在下?的hypot函數(shù)中:funchypot(x,yfloat64)float64{returnmath.Sqrt(x*x+y*y)}fmt.Println(hypot(3,4))//"5"x和y是形參名,3和4是調(diào)?時的傳?的實數(shù),函數(shù)返回了?個float64類型的值,返回值也可以像形式參數(shù)?樣被命名,在這種情況下,每個返回值被聲明成?個局部變量,并根據(jù)該返回值的類型,將其初始化為0。如果?個函數(shù)在聲明時,包含返回值列表,那么該函數(shù)必須以return語句結(jié)尾,除?函數(shù)明顯?法運?到結(jié)尾處,例如函數(shù)在結(jié)尾時調(diào)?了panic異?;蚝瘮?shù)中存在?限循環(huán)。正如hypot函數(shù)?樣,如果?組形參或返回值有相同的類型,我們不必為每個形參都寫出參數(shù)類型,下?2個聲明是等價的:funcf(i,j,kint,s,tstring){/*...*/}funcf(iint,jint,kint,sstring,tstring){/*...*/}下?,我們給出4種?法聲明擁有2個int型參數(shù)和1個int型返回值的函數(shù),空?標識符_可以強調(diào)某個參數(shù)未被使?。funcadd(xint,yint)int{returnx+y}funcsub(x,yint)(zint){z=x-y;return}funcfirst(xint,_int)int{returnx}funczero(int,int)int{return0}fmt.Printf("%T\n",add)//"func(int,int)int"fmt.Printf("%T\n",sub)//"func(int,int)int"fmt.Printf("%T\n",first)//"func(int,int)int"fmt.Printf("%T\n",zero)//"func(int,int)int"函數(shù)的類型被稱為函數(shù)的標識符,如果兩個函數(shù)形式參數(shù)列表和返回值列表中的變量類型??對應,那么這兩個函數(shù)被認為有相同的類型和標識符,形參和返回值的變量名不影響函數(shù)標識符也不影響它們是否可以以省略參數(shù)類型的形式表?。每?次函數(shù)在調(diào)?時都必須按照聲明順序為所有參數(shù)提供實參(參數(shù)值),在函數(shù)調(diào)?時,Go語?沒有默認參數(shù)值,也沒有任何?法可以通過參數(shù)名指定形參,因此形參和返回值的變量名對于函數(shù)調(diào)?者??沒有意義。在函數(shù)中,實參通過值傳遞的?式進?傳遞,因此函數(shù)的形參是實參的拷貝,對形參進?修改不會影響實參,但是,如果實參包括引?類型,如指針、slice(切?)、map、function、channel等類型,實參可能會由于函數(shù)的間接引?被修改。函數(shù)的返回值Go語??持多返回值,多返回值能?便地獲得函數(shù)執(zhí)?后的多個返回參數(shù),Go語?經(jīng)常使?多返回值中的最后?個返回參數(shù)返回函數(shù)執(zhí)?中可能?的錯誤,?例代碼如下:conn,err:=connectToNetwork()在這段代碼中,connectToNetwork返回兩個參數(shù),conn表?連接對象,err返回錯誤信息。其它編程語?中函數(shù)的返回值C/C++語?中只?持?個返回值,在需要返回多個數(shù)值時,則需要使?結(jié)構(gòu)體返回結(jié)果,或者在參數(shù)中使?指針變量,然后在函數(shù)內(nèi)部修改外部傳?的變量值,實現(xiàn)返回計算結(jié)果,C++語?中為了安全性,建議在參數(shù)返回數(shù)據(jù)時使?“引?”替代指針。C#語?也沒有多返回值特性,C#語?后期加?的ref和out關(guān)鍵字能夠通過函數(shù)的調(diào)?參數(shù)獲得函數(shù)體中修改的數(shù)據(jù)。lua語?沒有指針,但?持多返回值,在?塊數(shù)據(jù)使?時?便很多。Go語?既?持安全指針,也?持多返回值,因此在使?函數(shù)進?邏輯編寫時更為?便。1)同?種類型返回值如果返回值是同?種類型,則?括號將多個返回值類型括起來,?逗號分隔每個返回值的類型。使?return語句返回時,值列表的順序需要與函數(shù)聲明的返回值類型?致,?例代碼如下:functypedTwoValues()(int,int){return1,2}funcmain(){a,b:=typedTwoValues()fmt.Println(a,b)}代碼輸出結(jié)果:12純類型的返回值對于代碼可讀性不是很友好,特別是在同類型的返回值出現(xiàn)時,?法區(qū)分每個返回參數(shù)的意義。2)帶有變量名的返回值Go語??持對返回值進?命名,這樣返回值就和參數(shù)?樣擁有參數(shù)變量名和類型。命名的返回值變量的默認值為類型的默認值,即數(shù)值為0,字符串為空字符串,布爾為false、指針為nil等。下?代碼中的函數(shù)擁有兩個整型返回值,函數(shù)聲明時將返回值命名為a和b,因此可以在函數(shù)體中直接對函數(shù)返回值進?賦值,在命名的返回值?式的函數(shù)體中,在函數(shù)結(jié)束前需要顯式地使?return語句進?返回,代碼如下:funcnamedRetValues()(a,bint){a=1b=2return}代碼說明如下:第1?,對兩個整型返回值進?命名,分別為a和b。第3?和第4?,命名返回值的變量與這個函數(shù)的布局變量的效果?致,可以對返回值進?賦值和值獲取。第6?,當函數(shù)使?命名返回值時,可以在return中不填寫返回值列表,如果填寫也是可?的,下?代碼的執(zhí)?效果和上?代碼的效果?樣。funcnamedRetValues()(a,bint){a=1returna,2}提?同?種類型返回值和命名返回值兩種形式只能?選?,混?時將會發(fā)?編譯錯誤,例如下?的代碼:funcnamedRetValues()(a,bint,int)編譯報錯提?:mixednamedandunnamedfunctionparameters意思是:在函數(shù)參數(shù)中混合使?了命名和?命名參數(shù)。調(diào)?函數(shù)函數(shù)在定義后,可以通過調(diào)?的?式,讓當前代碼跳轉(zhuǎn)到被調(diào)?的函數(shù)中進?執(zhí)?,調(diào)?前的函數(shù)局部變量都會被保存起來不會丟失,被調(diào)?的函數(shù)運?結(jié)束后,恢復到調(diào)?函數(shù)的下??繼續(xù)執(zhí)?代碼,之前的局部變量也能繼續(xù)訪問。函數(shù)內(nèi)的局部變量只能在函數(shù)體中使?,函數(shù)調(diào)?結(jié)束后,這些局部變量都會被釋放并且失效。Go語?的函數(shù)調(diào)?格式如下:返回值變量列表=函數(shù)名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)時代的網(wǎng)絡安全技術(shù)及管理策略
- 3 桂花雨(說課稿)-2024-2025學年統(tǒng)編版語文五年級上冊
- 2023九年級數(shù)學上冊 第2章 一元二次方程2.2 一元二次方程的解法2.2.1 配方法第3課時 用配方法解二次項系數(shù)不為1的一元二次方程說課稿 (新版)湘教版
- Unit 6 Food Lesson 1(說課稿)-2024-2025學年人教精通版(2024)英語三年級上冊001
- 2025房地產(chǎn)委托合同書范本
- 2023九年級數(shù)學上冊 第二十四章 圓24.2 點和圓、直線和圓的位置關(guān)系24.2.2 直線和圓的位置關(guān)系第3課時 切線長定理說課稿(新版)新人教版001
- 2《我愛我們的祖國》說課稿-2024-2025學年統(tǒng)編版語文一年級上冊
- Unit1 Making friends Part C Make a mind map of making friends(說課稿)-2024-2025學年人教PEP版(2024)英語三年級上冊
- 2《我是什么》(說課稿)2024-2025學年二年級上冊語文統(tǒng)編版
- 2025關(guān)于招標合同的報告
- 四川省自貢市2024-2025學年上學期八年級英語期末試題(含答案無聽力音頻及原文)
- 2025-2030年中國汽車防滑鏈行業(yè)競爭格局展望及投資策略分析報告新版
- 2025年生物安全年度工作計劃
- 通用電子嘉賓禮薄
- 技能大賽題庫(空分)
- 污水處理廠設(shè)備的操作規(guī)程(完整版)
- GB/T 28419-2012風沙源區(qū)草原沙化遙感監(jiān)測技術(shù)導則
- GB/T 22077-2008架空導線蠕變試驗方法
- DDI領(lǐng)導力-高績效輔導課件
- 水泥罐安裝與拆除專項施工方案
- 大學語文課件(完整版)
評論
0/150
提交評論