GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫在最前面,其余函數(shù)按照功能需要進行排列
創(chuàng)新互聯(lián)公司成立于2013年,先為郫都等服務(wù)建站,郫都等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為郫都企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
GO的函數(shù) 不支持嵌套,重載和默認參數(shù)
GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等
GO的函數(shù)用 func 來聲明,且左大括號 { 不能另起一行
一個簡單的示例:
輸出為:
參數(shù):可以傳0個或多個值來供自己用
返回:通過用 return 來進行返回
輸出為:
上面就是一個典型的多參數(shù)傳遞與多返回值
對例子的說明:
按值傳遞:是對某個變量進行復(fù)制,不能更改原變量的值
引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內(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)用
輸出為
這是一個最簡單的測試了,當然還有更復(fù)雜的調(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
golang定義可變參數(shù)的函數(shù)方法是:
—- 采用ANSI標準形式時,參數(shù)個數(shù)可變的函數(shù)的原型聲明是:
type funcname(type para1, type para2, …)
—- 這種形式至少需要一個普通的形式參數(shù),后面的省略號不表示省略,而是函數(shù)原型的一部分。type是函數(shù)返回值和形式參數(shù)的類型。
—- 采用與UNIX System V兼容的聲明方式時,參數(shù)個數(shù)可變的函數(shù)原型是:
type funcname(va_alist)
va_dcl
—- 這種形式不需要提供任何普通的形式參數(shù)。
type是函數(shù)返回值的類型。va_dcl是對函數(shù)原型聲明中參數(shù)va_alist的詳細聲明,實際是一個宏定義,對不同的硬件平臺采用不同的類型來定義,但在最后都包括了一個分號。因此va_dcl后不再需要加上分號了。va_dcl在代碼中必須原樣給出。va_alist在VC中可以原樣給出,也可以略去。
此外,采用頭文件stdarg.h編寫的程序是符合ANSI標準的,可以在各種操作系統(tǒng)和硬件上運行;而采用頭文件varargs.h的方式僅僅是為了與以前的程序兼容。所以建議使用前者。
public class Test01 {//新建一個類 String s = new String("good");//創(chuàng)建一個對象名字為s內(nèi)容為good String[] ss = {"aaa"};//創(chuàng)建一個名為ss的數(shù)組只有1個數(shù)量內(nèi)容為aaa public void m_method(String str,String[] sa) {//設(shè)置一個公共的無返回值的名為m_method的函數(shù) ()里面是參數(shù) str = "bad";//把bad賦值給str sa[0]="bbb";把bbb賦值給sa的第一個數(shù)組對象 } public static void main(String[] args) {//程序入口 Test01 t1 = new Test01();//在Test01里創(chuàng)建一個名為t1的對象 t1.m_method(t1.s,t1.ss);//對象t1調(diào)用test01的m_method函數(shù),t1.s也就是test01類的s也就是good作為第一個參數(shù),t1.ss也就是test01類里面的ss也就是aaa作為第二個參數(shù)進行運行 System.out.println(t1.s+t1.ss[0]); //輸出t1.s的值和t1.ss[0]的值; }