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