新聞中心
現(xiàn)在這個(gè)時(shí)代似乎吹牛都不用打草稿,畫(huà)餅已成為常態(tài),搬個(gè)磚都敢說(shuō)自己是工程師,會(huì)敲個(gè)“Hello World!”的都說(shuō)自己是程序員。程序員真的是那么好入行的嗎? Daisuke Maki認(rèn)為成為一個(gè)真正的程序員并不是件易事,以Go語(yǔ)言為例,想成為一個(gè)Go程序員需經(jīng)歷七大“劫難”。

成都創(chuàng)新互聯(lián)主要為客戶(hù)提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、成都全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開(kāi)發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)公司、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都地磅秤行業(yè)客戶(hù)提供了網(wǎng)站設(shè)計(jì)服務(wù)。
“歷劫1”:你堅(jiān)信你可以用Go來(lái)做面向?qū)ο缶幊?
在經(jīng)歷了一次Go應(yīng)用之旅之后,你可能就會(huì)開(kāi)始思考:“怎么樣才能讓這種語(yǔ)言更像面向?qū)ο蟮木幊陶Z(yǔ)言?”因?yàn)槟阋呀?jīng)習(xí)慣了這種編程,你想要制作健壯的代碼、想要多態(tài)。
然后,你說(shuō):“一定有辦法實(shí)現(xiàn)的!”再然后,你就發(fā)現(xiàn)了結(jié)構(gòu)嵌入,它可以將來(lái)自封閉對(duì)象的方法巧妙的委托給嵌入對(duì)象,而無(wú)需重復(fù)代碼。這簡(jiǎn)直是太偉大了!
當(dāng)然,很快你就會(huì)發(fā)現(xiàn)這并不能真正解決問(wèn)題。因?yàn)榻Y(jié)構(gòu)嵌入只允許委派方法調(diào)用,所以看起來(lái)你是在做多態(tài)方法調(diào)度,但關(guān)系并不是IS-A,而是HAS-A,方法調(diào)用的接收方不是封閉對(duì)象,而始終是委托方法調(diào)用的嵌入對(duì)象。
所以,你明白了不要試圖在Go中進(jìn)行面向?qū)ο蟮木幊?
“歷劫2”:你相信goroutines會(huì)解決所有的問(wèn)題?
在使用之前,你曾被“通過(guò)goroutines可以輕松運(yùn)行并發(fā)代碼”所蠱惑,你所要做的就是使用Go關(guān)鍵字,同時(shí)運(yùn)行所有函數(shù)或者方法調(diào)用。這時(shí)你自然就會(huì)想到通過(guò)讓代碼并發(fā)運(yùn)行來(lái)***限度地提高代碼的效率。通過(guò)函數(shù)調(diào)用自動(dòng)創(chuàng)建goroutines,甚至調(diào)用者都沒(méi)有意識(shí)到。沒(méi)錯(cuò)兒,它的確做到了所有代碼都在同時(shí)運(yùn)行,但是它讓代碼變得更復(fù)雜了。
Go允許用戶(hù)創(chuàng)建數(shù)百萬(wàn)的goroutine,而且不會(huì)犧牲太多的效率,那么你真的應(yīng)該使用goroutine嗎?你要知道并行代碼相比在單線(xiàn)程中流動(dòng)的代碼而言,是更加難以維護(hù)和調(diào)試對(duì)的。一次從多個(gè)goroutine訪(fǎng)問(wèn)時(shí),你要考慮共享對(duì)象是否正確同步?執(zhí)行順序是否絕對(duì)正確? goroutine是否在不再需要時(shí)實(shí)際退出了?
所以,goroutine并不是***的,一定要在必要的時(shí)候使用,而且盡量不要在用戶(hù)的后面使用goroutine。
并且因?yàn)槟ㄟ^(guò)使您的函數(shù)調(diào)用自動(dòng)創(chuàng)建goroutines來(lái)隱藏此事實(shí),因此調(diào)用者甚至不需要意識(shí)到這一點(diǎn)。
“歷劫3”:你認(rèn)為接口將代替面向?qū)ο缶幊探鉀Q所有的問(wèn)題?
在你終于意識(shí)到對(duì)象無(wú)法使用多態(tài)之后,突然想到了可以利用接口提供的功能,接口支持API,所以可以使用它來(lái)編寫(xiě)更健壯的代碼。
所以現(xiàn)在當(dāng)你編寫(xiě)庫(kù)時(shí),定義了所有的接口,只導(dǎo)出接口并具有私有結(jié)構(gòu),以便封裝成perrrrfect。它還為你提供了更多的靈活性來(lái)切換底層實(shí)現(xiàn),因?yàn)楝F(xiàn)在你已成功地將API與其實(shí)現(xiàn)分離。
接口雖然給予了你很大的權(quán)力,但它不是一個(gè)***解決方案。在面向?qū)ο缶幊讨?,它仍然沒(méi)有提供真正的多態(tài)性,而且你也要受到接口只能定義API的限制,無(wú)法將所有數(shù)據(jù)與其相關(guān)聯(lián)。
當(dāng)然,在某種場(chǎng)景下只導(dǎo)出接口是有意義的,當(dāng)代碼量比較小的時(shí)候,接口是很好的方法。但是如果在代碼量大的時(shí)候,你不得不額外再多編寫(xiě)大量的代碼。
如果想要***限度的利用接口,可以在某些類(lèi)型互換時(shí)使用。
“歷劫4”:你相信channel可以解決所有問(wèn)題?
在你歷經(jīng)曲折,嘗試了多種方法曲線(xiàn)救國(guó)無(wú)果之后,也許某一天靈光一閃,“等等,還有channel?!?/p>
Channel隱式處理并發(fā)訪(fǎng)問(wèn),你相信通過(guò)channel可以巧妙的來(lái)處理同步、返回值以及使用各種channel的select語(yǔ)句來(lái)進(jìn)行流量控制。
沒(méi)錯(cuò),channel是很有用的,和你的初衷也是相符的,它提供了一個(gè)在goroutine之間傳遞值的原語(yǔ)。但是,慢慢你就會(huì)發(fā)現(xiàn)使用channel的Go語(yǔ)言會(huì)出現(xiàn)很多問(wèn)題,例如超時(shí)、阻塞I / O,同步問(wèn)題等。
所以,你要明白channel是很簡(jiǎn)潔的結(jié)構(gòu),但是如果濫用它會(huì)導(dǎo)致更復(fù)雜、難以調(diào)試的代碼。
“歷劫5”:“哼哼,Go語(yǔ)言也一般般嘛,哪有大家說(shuō)的那么強(qiáng)大”
“為什么?到底是為什么?寫(xiě)Go代碼實(shí)在是太痛苦了,它一直不允許我按照自己的方式來(lái)寫(xiě)?!痹趪L試了各種方法之后,你發(fā)現(xiàn)它們都不能解決多態(tài)性和并發(fā)性的問(wèn)題,你甚至開(kāi)始懷疑Go語(yǔ)言存在的合理性,你覺(jué)得你被剝奪了其它語(yǔ)言提供的所有好的結(jié)構(gòu)和工具。
你認(rèn)為用更有力的工具來(lái)表達(dá)抽象思想是絕對(duì)有必要的,而Go只是沒(méi)有削減它。
但是,你忘記了,所有的語(yǔ)言都是有限制性的,你不能只是一味的想要語(yǔ)言按照你的想法來(lái)運(yùn)行,而不考慮當(dāng)初作者設(shè)計(jì)這門(mén)語(yǔ)言的初衷。
“歷劫6”:你開(kāi)始意識(shí)到前面5個(gè)階段其實(shí)都是你在想象
到了這個(gè)階段,你基本上就放棄了各種小聰明的做法,決定根據(jù)大多數(shù)標(biāo)準(zhǔn)庫(kù)的寫(xiě)法來(lái)編寫(xiě)Go代碼。
這時(shí)候你還是有這么一個(gè)想法:我不想接受Go語(yǔ)言的方法。但是這個(gè)時(shí)候,一切就開(kāi)始變得有趣了。
在我不得不放棄面向?qū)ο缶幊?,從而擁抱Go語(yǔ)言的同時(shí),也不得不接受一個(gè)事實(shí),編寫(xiě)并發(fā)代碼實(shí)在是太難了。我始終堅(jiān)信語(yǔ)言的重點(diǎn)是讓程序員編寫(xiě)更簡(jiǎn)潔的代碼,所以,一門(mén)語(yǔ)言它要足夠編寫(xiě)執(zhí)行復(fù)雜的代碼,但是通過(guò)刪除某些關(guān)鍵工具,讓最終編寫(xiě)的代碼更簡(jiǎn)單。
“歷劫7”:羽化成仙
到了這個(gè)階段,你已經(jīng)完全接受了Go,你可以用Go來(lái)編寫(xiě)所有的內(nèi)容,包括Perl / Ruby / Python的內(nèi)容。你開(kāi)始意識(shí)到再也沒(méi)有錯(cuò)誤困擾著你;你必須使用goroutines和channel,
因?yàn)槟闶荊opher;你會(huì)感到榮幸,Go語(yǔ)言竟然允許你這樣來(lái)編寫(xiě)代碼。
恭喜,現(xiàn)在你已經(jīng)是一名Go語(yǔ)言程序員了!
新聞名稱(chēng):Go語(yǔ)言大神親述:歷七劫方可成為程序員!
網(wǎng)頁(yè)網(wǎng)址:http://m.fisionsoft.com.cn/article/cohpide.html


咨詢(xún)
建站咨詢(xún)
