從語法講,重載是擴(kuò)展了函數(shù)(或方法)簽名,從只認(rèn)名字變?yōu)槊?參數(shù)類型,所以題主這個(gè)例子只要把不同參數(shù)的foo函數(shù)改成不同名字就好,比如foo1,foo2……
成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、陸河網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陸河等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
這個(gè)不支持按官方說法,是為了保持語法簡(jiǎn)單,以及避免工程中遇到一些問題,比如參數(shù)隱式轉(zhuǎn)換等等
而支持重載的語言也有它們的道理,有時(shí)候,函數(shù)或方法名字不是程序員自己能控制的,比如說,如果java不支持重載,那么只能有一個(gè)構(gòu)造函數(shù),通過不同輸入構(gòu)造對(duì)象就比較麻煩,需要弄成靜態(tài)方法create的方式:
上圖是Golang官網(wǎng)FAQ的部分截圖,看來關(guān)于Go不支持重載的這個(gè)問題困擾了很多從面向?qū)ο笳Z言轉(zhuǎn)到Go的開發(fā)者。官方在這里做出了解答。
在上面的回答中有這樣一句話:
其意思是: 使用其他語言的經(jīng)驗(yàn)告訴我們,使用具有相同名稱但簽名不同的多種方法有時(shí)會(huì)很有用,但在實(shí)踐中也可能會(huì)造成混淆和脆弱。
接下來又說: 在Go的類型系統(tǒng)中,僅按名稱進(jìn)行匹配并要求類型一致是一個(gè)簡(jiǎn)化的主要決定。
最后一句話: 關(guān)于操作員重載,似乎比絕對(duì)要求更方便。 同樣,沒有它,事情會(huì)變得更簡(jiǎn)單。
整個(gè)的解答非常漂亮、簡(jiǎn)潔。我們看完之后就會(huì)理解,Go語言的設(shè)計(jì)者之所以沒有在Go中實(shí)現(xiàn)方法的重載,并沒有復(fù)雜的理由,核心原則就是: 讓Go保持足夠的簡(jiǎn)單。 這也能看出來Go語言的設(shè)計(jì)者有著極大的選擇和克制。
其實(shí),筆者認(rèn)為重載在本質(zhì)上并沒有很大的實(shí)際意義。只是表現(xiàn)力和表現(xiàn)形式上有一定的差別。明確某個(gè)上下文中的函數(shù)調(diào)用的關(guān)鍵就是函數(shù)簽名,支持重載的語言中一般是函數(shù)名加函數(shù)參數(shù)構(gòu)成函數(shù)簽名。而Go中可以認(rèn)為函數(shù)名就是簽名。邏輯上沒有太大的區(qū)別,就是把工作做在了臺(tái)前 還是幕后的區(qū)別。
當(dāng)然如果非要較真的話,我們或許可以在Go中聲明方法的時(shí)候?qū)?shù)寫成 interface{} 或者 ... 切片的方式。在傳進(jìn)來參數(shù)的時(shí)候做一步校驗(yàn),判斷參數(shù)的類型和個(gè)數(shù),然后分別處理之。
仁者見仁智者見智,大家有什么不同的理解歡迎一起溝通。
區(qū)別:
1、Go不允許函數(shù)重載,必須具有方法和函數(shù)的唯一名稱;java允許函數(shù)重載。
2、Java默認(rèn)允許多態(tài),Go沒有。
3、Go代碼可以自動(dòng)擴(kuò)展到多個(gè)核心;而Java并不總是具有足夠的可擴(kuò)展性。
4、Java不支持多繼承,Go支持多繼承。
什么是go語言?
Go也稱為Golang,是一種編程語言。作為一種開源編程語言,Go可以輕松構(gòu)建可靠,簡(jiǎn)單和高效的軟件。
Go是鍵入的靜態(tài)編譯語言。Go語言提供垃圾收集,CSP風(fēng)格的并發(fā)性,內(nèi)存安全性和結(jié)構(gòu)類型。
什么是java?
Java是一種用于一般用途的計(jì)算機(jī)編程語言,它是基于類的,并發(fā)的和面向?qū)ο蟮?。Java專門設(shè)計(jì)為包含很少的實(shí)現(xiàn)依賴項(xiàng)。Java應(yīng)用程序在JVM(Java虛擬機(jī))上運(yùn)行。它是當(dāng)今最著名和最著名的編程語言之一。
分享標(biāo)題:go語言方法重載 go語言 方法
URL網(wǎng)址:http://jinyejixie.com/article20/dosghjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、、營銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)