Go語言的MV書包在上面來說會比放在下面好,一般來說這種情況的話基本上都是放在上面比較好。
東興ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
在接觸到go之前,我認(rèn)為函數(shù)和方法只是同一個東西的兩個名字而已(在我熟悉的c/c++,python,java中沒有明顯的區(qū)別),但是在golang中者完全是兩個不同的東西。官方的解釋是,方法是包含了接收者的函數(shù)。到底什么意思呢。
首先函數(shù)的格式是固定的,func+函數(shù)名+ 參數(shù) + 返回值(可選) + 函數(shù)體。例
func main()
{
fmt.Println("Hello go")
}
在golang中有兩個特殊的函數(shù),main函數(shù)和init函數(shù),main函數(shù)不用介紹在所有語言中都一樣,它作為一個程序的入口,只能有一個。init函數(shù)在每個package是可選的,可有可無,甚至可以有多個(但是強(qiáng)烈建議一個package中一個init函數(shù)),init函數(shù)在你導(dǎo)入該package時程序會自動調(diào)用init函數(shù),所以init函數(shù)不用我們手動調(diào)用,l另外它只會被調(diào)用一次,因為當(dāng)一個package被多次引用時,它只會被導(dǎo)入一次。
package?main
import?(
"demo/mypackage"
"fmt"
)
func?main()?{
fmt.Println("Hello?go....?I?=?",?mypackage.I)
}
運(yùn)行結(jié)果:
我們可以看到,程序為我們自動調(diào)用了兩個init函數(shù),并且是按照順序調(diào)用的。
下面來看方法。
package?main
import?"fmt"
type?myint?int
//乘2
func?(p?*myint)?mydouble()?int?{
*p?=?*p?*?2
return?0
}
//平方
func?(p?myint)?mysquare()?int?{
p?=?p?*?p
fmt.Println("mysquare?p?=?",?p)
return?0
}
func?main()?{
var?i?myint?=?2
i.mydouble()
fmt.Println("i?=?",?i)
i.mysquare()
fmt.Println("i?=?",?i)
}
運(yùn)行結(jié)果:
我們可以看到方法和函數(shù)的區(qū)別,方法在func關(guān)鍵字后是接收者而不是函數(shù)名,接收者可以是自己定義的一個類型,這個類型可以是struct,interface,甚至我們可以重定義基本數(shù)據(jù)類型。我們可以給他一些我們想要的方法來滿足我們的實際工程中的需求,就像上面一樣我重定義了int并給了它一個乘2和平法的方法,這里我們要注意一個細(xì)節(jié),接收者是指針和非指針的區(qū)別,我們可以看到當(dāng)接收者為指針式,我們可以通過方法改變該接收者的屬性,但是非指針類型缺做不到。
這里的接收者和c++中的this指針有一些相似,我們可以把接受者當(dāng)作一個class,而這些方法就是類的成員函數(shù),當(dāng)接收者為指針類型是就是c++中的非const成員函數(shù),為非指針時就是const成員函數(shù),不能通過此方法改變累的成員變量。
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用不到,我們可以使用 _ 來補(bǔ)位,例如上例的返回我們可以寫成 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)用
本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct
1,go的變量聲明順序是:”先寫變量名,再寫類型名“,此與C/C++的語法孰優(yōu)孰劣,可見下文解釋:
2,go是通過package來組織的(與python類似),只有package名為main的包可以包含main函數(shù),一個可執(zhí)行程序有且僅有一個main包,通過import關(guān)鍵字來導(dǎo)入其他非main包。
3,可見性規(guī)則。go語言中,使用大小寫來決定該常量、變量、類型、接口、結(jié)構(gòu)或函數(shù)是否可以被外部包含調(diào)用。根據(jù)約定,函數(shù)名首字母小寫即為private,函數(shù)名首字母大寫即為public。
4,go內(nèi)置關(guān)鍵字(25個均為小寫)。
5,函數(shù)不用先聲明,即可使用。
6,在函數(shù)內(nèi)部可以通過 := 隱士定義變量。(函數(shù)外必須顯示使用var定義變量)
7,go程序使用UTF-8編碼的純Unicode文本編寫。
8,使用big.Int的陷阱:
9,從技術(shù)層面講,go語言的語句是以分號分隔的,但這些是由編譯器自動添加的,不用手動輸入,除非需要在同一行中寫入多個語句。沒有分號及只需少量的逗號和圓括號,使得go語言的程序更容易閱讀。
10,go語言只有一個循環(huán)結(jié)構(gòu)——for循環(huán)。
11,go里的自增運(yùn)算符只有——“后++”
12,go語言中的slice用法類似python中數(shù)組,關(guān)于slice的詳細(xì)用法可見:
13,函數(shù)也是一個值,使用匿名函數(shù)返回一個值。
14,函數(shù)閉包的使用,閉包是一個匿名函數(shù)值,會引用到其外部的變量。
網(wǎng)站名稱:go語言main函數(shù) go語言make函數(shù)
文章網(wǎng)址:http://jinyejixie.com/article48/dossjep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、App開發(fā)、網(wǎng)站制作、虛擬主機(jī)、動態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)