GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫在最前面,其余函數(shù)按照功能需要進(jìn)行排列
站在用戶的角度思考問題,與客戶深入溝通,找到涿州網(wǎng)站設(shè)計(jì)與涿州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋涿州地區(qū)。
GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)
GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等
GO的函數(shù)用 func 來聲明,且左大括號 { 不能另起一行
一個(gè)簡單的示例:
輸出為:
參數(shù):可以傳0個(gè)或多個(gè)值來供自己用
返回:通過用 return 來進(jìn)行返回
輸出為:
上面就是一個(gè)典型的多參數(shù)傳遞與多返回值
對例子的說明:
按值傳遞:是對某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值
引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變原來的值,并且消耗的內(nèi)存會更少,只有4或8個(gè)字節(jié)的消耗
在上例中,返回值 (d int, e int, f int) { 是進(jìn)行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:
當(dāng)返回了多個(gè)值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來補(bǔ)位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉
在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個(gè)可變長度的參數(shù)
輸出為:
在上例中, strs ...string 中, strs 的實(shí)際值是b,c,d,e,這就是一個(gè)最簡單的傳遞可變長度的參數(shù)的例子,更多一些演變的形式,都非常類似
在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對像中的析構(gòu)函數(shù),也就是在某個(gè)函數(shù)執(zhí)行完成后,GO會自動這個(gè);
如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進(jìn)后出;
當(dāng)某個(gè)函數(shù)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), defer 也會被調(diào)用
輸出為
這是一個(gè)最簡單的測試了,當(dāng)然還有更復(fù)雜的調(diào)用,比如調(diào)試程序時(shí),判斷是哪個(gè)函數(shù)出了問題,完全可以根據(jù) defer 打印出來的內(nèi)容來進(jìn)行判斷,非??焖?,這種留給你們?nèi)?shí)現(xiàn)
一個(gè)函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱之為遞歸函數(shù),在做遞歸調(diào)用時(shí),經(jīng)常會將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用
本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct
前段時(shí)間,我們實(shí)驗(yàn)室用go作為后臺開發(fā)語言開發(fā)了一個(gè)web項(xiàng)目,由于這是自己第一次使用go語言進(jìn)行開發(fā),在開發(fā)過程中,一味著追求完成任務(wù),在編碼的時(shí)候沒有太注重性能,雖然勉強(qiáng)實(shí)現(xiàn)了功能,但是對go語言的理解還是比較淺顯的。下面來談?wù)勛约簩o語言中函數(shù)與方法的理解。
普通函數(shù):
go函數(shù)可以返回多個(gè)值
值傳遞: 值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣函數(shù)中如果對參數(shù)進(jìn)行修改,將不會影響到實(shí)際參數(shù)
引用傳遞: 引用傳遞是指在調(diào)用函數(shù)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)進(jìn)行的修改,將影響到實(shí)際參數(shù)。
一般來說go語言函數(shù)的 接收者(也就是形參)一般放在函數(shù)名后面 ,不能將指針類型的數(shù)據(jù)直接傳遞,也就是說函數(shù)形參如果是值類型,調(diào)用者必須使用值作為實(shí)參過來,如果函數(shù)形參是指針類型,則函數(shù)調(diào)用者需使用指針作為實(shí)參來調(diào)用。
普通方法:
接收者是在func關(guān)鍵字后面,而不是在函數(shù)名稱后面,接收者可以是自己定義的一個(gè)類型,這個(gè)類型可以是struct、interface,一個(gè)方法就是一個(gè)包含了接收者的函數(shù),接收者可以是命名類型或者是結(jié)構(gòu)體類型的一個(gè)值或者是一個(gè)指針。
下面是一個(gè)例子來說明方法和函數(shù)的區(qū)別(重點(diǎn))
從語法講,重載是擴(kuò)展了函數(shù)(或方法)簽名,從只認(rèn)名字變?yōu)槊?參數(shù)類型,所以題主這個(gè)例子只要把不同參數(shù)的foo函數(shù)改成不同名字就好,比如foo1,foo2……
這個(gè)不支持按官方說法,是為了保持語法簡單,以及避免工程中遇到一些問題,比如參數(shù)隱式轉(zhuǎn)換等等
而支持重載的語言也有它們的道理,有時(shí)候,函數(shù)或方法名字不是程序員自己能控制的,比如說,如果java不支持重載,那么只能有一個(gè)構(gòu)造函數(shù),通過不同輸入構(gòu)造對象就比較麻煩,需要弄成靜態(tài)方法create的方式:
函數(shù)的go語言中的一級公民,我們把所有的功能單元都定義在函數(shù)中,可以重復(fù)使用。函數(shù)包含函數(shù)的名稱、參數(shù)列表和返回值類型,這些構(gòu)成了函數(shù)的簽名(signature)。
函數(shù)在使用之前必須先定義,可以調(diào)用函數(shù)來完成某個(gè)任務(wù)。函數(shù)可以重復(fù)調(diào)用,從而達(dá)到代碼重用。
go語言函數(shù)定義語法
語法解析:
go語言函數(shù)定義實(shí)例
定義一個(gè)求和函數(shù)
定義一個(gè)比較兩個(gè)數(shù)大小的函數(shù)
go語言函數(shù)調(diào)用
當(dāng)我們要完成某個(gè)任務(wù)時(shí),可以調(diào)用函數(shù)來完成。調(diào)用函數(shù)要傳遞參數(shù),如何有返回值可以獲得返回值。
運(yùn)行結(jié)果
本文標(biāo)題:go語言函數(shù)定義 go語言 func
轉(zhuǎn)載來于:http://www.rwnh.cn/article44/ddosjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、云服務(wù)器、網(wǎng)頁設(shè)計(jì)公司、靜態(tài)網(wǎng)站、網(wǎng)站營銷、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)