go語言的函數(shù)的定義 go語言函數(shù)和方法

淺談Go語言函數(shù)與方法的區(qū)別

前段時間,我們實驗室用go作為后臺開發(fā)語言開發(fā)了一個web項目,由于這是自己第一次使用go語言進行開發(fā),在開發(fā)過程中,一味著追求完成任務,在編碼的時候沒有太注重性能,雖然勉強實現(xiàn)了功能,但是對go語言的理解還是比較淺顯的。下面來談談自己對go語言中函數(shù)與方法的理解。

公司主營業(yè)務:做網(wǎng)站、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出本溪免費做網(wǎng)站回饋大家。

普通函數(shù):

go函數(shù)可以返回多個值

值傳遞: 值傳遞是指在調(diào)用函數(shù)時將實際參數(shù)復制一份傳遞到函數(shù)中,這樣函數(shù)中如果對參數(shù)進行修改,將不會影響到實際參數(shù)

引用傳遞: 引用傳遞是指在調(diào)用函數(shù)將實際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)進行的修改,將影響到實際參數(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語言學習系列八——GO函數(shù)(func)的聲明與使用

GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫在最前面,其余函數(shù)按照功能需要進行排列

GO的函數(shù) 不支持嵌套,重載和默認參數(shù)

GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

GO的函數(shù)用 func 來聲明,且左大括號 { 不能另起一行

一個簡單的示例:

輸出為:

參數(shù):可以傳0個或多個值來供自己用

返回:通過用 return 來進行返回

輸出為:

上面就是一個典型的多參數(shù)傳遞與多返回值

對例子的說明:

按值傳遞:是對某個變量進行復制,不能更改原變量的值

引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內(nèi)存會更少,只有4或8個字節(jié)的消耗

在上例中,返回值 (d int, e int, f int) { 是進行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:

當返回了多個值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來補位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個可變長度的參數(shù)

輸出為:

在上例中, strs ...string 中, strs 的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數(shù)的例子,更多一些演變的形式,都非常類似

在GO中 defer 關(guān)鍵字非常重要,相當于面相對像中的析構(gòu)函數(shù),也就是在某個函數(shù)執(zhí)行完成后,GO會自動這個;

如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進后出;

當某個函數(shù)出現(xiàn)嚴重錯誤時, defer 也會被調(diào)用

輸出為

這是一個最簡單的測試了,當然還有更復雜的調(diào)用,比如調(diào)試程序時,判斷是哪個函數(shù)出了問題,完全可以根據(jù) defer 打印出來的內(nèi)容來進行判斷,非??焖伲@種留給你們?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ù)(或方法)簽名,從只認名字變?yōu)槊?參數(shù)類型,所以題主這個例子只要把不同參數(shù)的foo函數(shù)改成不同名字就好,比如foo1,foo2……

這個不支持按官方說法,是為了保持語法簡單,以及避免工程中遇到一些問題,比如參數(shù)隱式轉(zhuǎn)換等等

而支持重載的語言也有它們的道理,有時候,函數(shù)或方法名字不是程序員自己能控制的,比如說,如果java不支持重載,那么只能有一個構(gòu)造函數(shù),通過不同輸入構(gòu)造對象就比較麻煩,需要弄成靜態(tài)方法create的方式:

文章標題:go語言的函數(shù)的定義 go語言函數(shù)和方法
轉(zhuǎn)載來于:http://muchs.cn/article12/doschdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、域名注冊、品牌網(wǎng)站制作、網(wǎng)站設(shè)計公司、企業(yè)建站、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(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)

商城網(wǎng)站建設(shè)