国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

golang 函數以及函數和方法的詳解及區別

2020-04-01 19:05:49
字體:
來源:轉載
供稿:網友

golang 函數以及函數和方法的區別

在接觸到go之前,我認為函數和方法只是同一個東西的兩個名字而已(在我熟悉的c/c++,python,java中沒有明顯的區別),但是在golang中者完全是兩個不同的東西。官方的解釋是,方法是包含了接收者的函數。到底什么意思呢。

首先函數的格式是固定的,func+函數名+ 參數 + 返回值(可選) + 函數體。例

func main() {fmt.Println("Hello go")}

在golang中有兩個特殊的函數,main函數和init函數,main函數不用介紹在所有語言中都一樣,它作為一個程序的入口,只能有一個。init函數在每個package是可選的,可有可無,甚至可以有多個(但是強烈建議一個package中一個init函數),init函數在你導入該package時程序會自動調用init函數,所以init函數不用我們手動調用,l另外它只會被調用一次,因為當一個package被多次引用時,它只會被導入一次。

package mypackageimport ( "fmt")var I intfunc init() { I = 0 fmt.Println("Call mypackage init1")}func init() { I = 1 fmt.Println("Call mypackage init2")}
package mainimport ( "demo/mypackage" "fmt")func main() { fmt.Println("Hello go.... I = ", mypackage.I)}

運行結果:

golang,函數以及函數和方法的區別,golang函數

我們可以看到,程序為我們自動調用了兩個init函數,并且是按照順序調用的。

下面來看方法。

package mainimport "fmt"type myint int//乘2func (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)}

運行結果:

golang,函數以及函數和方法的區別,golang函數

我們可以看到方法和函數的區別,方法在func關鍵字后是接收者而不是函數名,接收者可以是自己定義的一個類型,這個類型可以是struct,interface,甚至我們可以重定義基本數據類型。我們可以給他一些我們想要的方法來滿足我們的實際工程中的需求,就像上面一樣我重定義了int并給了它一個乘2和平法的方法,這里我們要注意一個細節,接收者是指針和非指針的區別,我們可以看到當接收者為指針式,我們可以通過方法改變該接收者的屬性,但是非指針類型缺做不到。

這里的接收者和c++中的this指針有一些相似,我們可以把接受者當作一個class,而這些方法就是類的成員函數,當接收者為指針類型是就是c++中的非const成員函數,為非指針時就是const成員函數,不能通過此方法改變累的成員變量。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长治市| 阿拉善左旗| 安康市| 琼结县| 柯坪县| 崇礼县| 益阳市| 大埔区| 故城县| 榕江县| 阿拉善盟| 晋江市| 沙田区| 合江县| 墨竹工卡县| 陆丰市| 叶城县| 乳山市| 平原县| 蓝田县| 麻江县| 遵义市| 武胜县| 启东市| 缙云县| 景宁| 策勒县| 嘉黎县| 黎川县| 黄冈市| 宜良县| 怀化市| 天全县| 德昌县| 吴旗县| 龙海市| 龙海市| 彝良县| 嘉禾县| 荥阳市| 上犹县|