亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么成為一名Go語言程序員

發布時間:2022-01-18 10:26:37 來源:億速云 閱讀:120 作者:iii 欄目:編程語言

本篇內容主要講解“怎么成為一名Go語言程序員”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么成為一名Go語言程序員”吧!

“歷劫1”:你堅信你可以用Go來做面向對象編程?

在經歷了一次Go應用之旅之后,你可能就會開始思考:“怎么樣才能讓這種語言更像面向對象的編程語言?”因為你已經習慣了這種編程,你想要制作健壯的代碼、想要多態。

然后,你說:“一定有辦法實現的!”再然后,你就發現了結構嵌入,它可以將來自封閉對象的方法巧妙的委托給嵌入對象,而無需重復代碼。這簡直是太偉大了!

當然,很快你就會發現這并不能真正解決問題。因為結構嵌入只允許委派方法調用,所以看起來你是在做多態方法調度,但關系并不是IS-A,而是HAS-A,方法調用的接收方不是封閉對象,而始終是委托方法調用的嵌入對象。

所以,你明白了不要試圖在Go中進行面向對象的編程?

“歷劫2”:你相信goroutines會解決所有的問題?

在使用之前,你曾被“通過goroutines可以輕松運行并發代碼”所蠱惑,你所要做的就是使用Go關鍵字,同時運行所有函數或者方法調用。這時你自然就會想到通過讓代碼并發運行來***限度地提高代碼的效率。通過函數調用自動創建goroutines,甚至調用者都沒有意識到。沒錯兒,它的確做到了所有代碼都在同時運行,但是它讓代碼變得更復雜了。

Go允許用戶創建數百萬的goroutine,而且不會犧牲太多的效率,那么你真的應該使用goroutine嗎?你要知道并行代碼相比在單線程中流動的代碼而言,是更加難以維護和調試對的。一次從多個goroutine訪問時,你要考慮共享對象是否正確同步?執行順序是否絕對正確?  goroutine是否在不再需要時實際退出了?

所以,goroutine并不是***的,一定要在必要的時候使用,而且盡量不要在用戶的后面使用goroutine。

并且因為您通過使您的函數調用自動創建goroutines來隱藏此事實,因此調用者甚至不需要意識到這一點。

“歷劫3”:你認為接口將代替面向對象編程解決所有的問題?

在你終于意識到對象無法使用多態之后,突然想到了可以利用接口提供的功能,接口支持API,所以可以使用它來編寫更健壯的代碼。

所以現在當你編寫庫時,定義了所有的接口,只導出接口并具有私有結構,以便封裝成perrrrfect。它還為你提供了更多的靈活性來切換底層實現,因為現在你已成功地將API與其實現分離。

接口雖然給予了你很大的權力,但它不是一個***解決方案。在面向對象編程中,它仍然沒有提供真正的多態性,而且你也要受到接口只能定義API的限制,無法將所有數據與其相關聯。

當然,在某種場景下只導出接口是有意義的,當代碼量比較小的時候,接口是很好的方法。但是如果在代碼量大的時候,你不得不額外再多編寫大量的代碼。

如果想要***限度的利用接口,可以在某些類型互換時使用。

“歷劫4”:你相信channel可以解決所有問題?

在你歷經曲折,嘗試了多種方法曲線救國無果之后,也許某一天靈光一閃,“等等,還有channel。”

Channel隱式處理并發訪問,你相信通過channel可以巧妙的來處理同步、返回值以及使用各種channel的select語句來進行流量控制。

沒錯,channel是很有用的,和你的初衷也是相符的,它提供了一個在goroutine之間傳遞值的原語。但是,慢慢你就會發現使用channel的Go語言會出現很多問題,例如超時、阻塞I  / O,同步問題等。

所以,你要明白channel是很簡潔的結構,但是如果濫用它會導致更復雜、難以調試的代碼。

“歷劫5”:“哼哼,Go語言也一般般嘛,哪有大家說的那么強大”

“為什么?到底是為什么?寫Go代碼實在是太痛苦了,它一直不允許我按照自己的方式來寫。”在嘗試了各種方法之后,你發現它們都不能解決多態性和并發性的問題,你甚至開始懷疑Go語言存在的合理性,你覺得你被剝奪了其它語言提供的所有好的結構和工具。

你認為用更有力的工具來表達抽象思想是絕對有必要的,而Go只是沒有削減它。

但是,你忘記了,所有的語言都是有限制性的,你不能只是一味的想要語言按照你的想法來運行,而不考慮當初作者設計這門語言的初衷。

“歷劫6”:你開始意識到前面5個階段其實都是你在想象

到了這個階段,你基本上就放棄了各種小聰明的做法,決定根據大多數標準庫的寫法來編寫Go代碼。

這時候你還是有這么一個想法:我不想接受Go語言的方法。但是這個時候,一切就開始變得有趣了。

在我不得不放棄面向對象編程,從而擁抱Go語言的同時,也不得不接受一個事實,編寫并發代碼實在是太難了。我始終堅信語言的重點是讓程序員編寫更簡潔的代碼,所以,一門語言它要足夠編寫執行復雜的代碼,但是通過刪除某些關鍵工具,讓最終編寫的代碼更簡單。

“歷劫7”:羽化成仙

到了這個階段,你已經完全接受了Go,你可以用Go來編寫所有的內容,包括Perl / Ruby /  Python的內容。你開始意識到再也沒有錯誤困擾著你;你必須使用goroutines和channel,

因為你是Gopher;你會感到榮幸,Go語言竟然允許你這樣來編寫代碼。

恭喜,現在你已經是一名Go語言程序員了!

到此,相信大家對“怎么成為一名Go語言程序員”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

塘沽区| 安顺市| 平安县| 青浦区| 务川| 河间市| 衡阳市| 依兰县| 闽清县| 晋州市| 江安县| 临武县| 静安区| 柳林县| 岚皋县| 九江县| 奉节县| 津市市| 历史| 虞城县| 疏勒县| 大连市| 赣州市| 平原县| 彭泽县| 高青县| 内丘县| 平罗县| 钟山县| 视频| 成都市| 延津县| 南川市| 光泽县| 玉溪市| 汉沽区| 馆陶县| 河津市| 巴彦县| 石狮市| 泌阳县|