久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用Go語言工作400天后的感受

 jackzzz 2018-02-20

2016-07-07最新修改,,添加GC演變說明,。


我在2011年就聽說了Go并學習了一段時間,坦白的說,,那時候對Go是比較無感的,,因為并

沒有看到Go特別亮眼的地方,可能和我使用C,、Erlang,、Java有關,這三種語言可以寫高性能,、高

并發(fā),、高可用的服務;包含了面向過程,、面向并發(fā),、面向對的思想,我覺得我并不需要再學習

Go,,何況那個時候好像也沒宣傳的那么優(yōu)秀,。

一切都發(fā)生在418天前,因為工作的需要,,我開始寫Go了,,本來預期是一段壓抑、蛋疼的

旅程(被迫使用其它語言的同學可都會有此感受),,結果收獲了非一般的驚喜,、非一般的效率、

非一般的開發(fā)驗,。

先用幾個詞來總結一下我的感受:簡潔,、標準、組合,、創(chuàng)造力,、生產力!

特別是生產力,由于Go優(yōu)秀的標準庫,、完美的代碼安全,、全面的三方庫、完善的測試機

制,、完善的標準管理工具,,使用Go給我們小組帶來了極大的生產力。

總之,,在使用過的語言中,,除了Erlang外,我還沒在其它語言上感受過如此之高的生產

力(可能筆者的見識比較狹隘,,請輕,;) )。 最近思考了很多,,也橫向對比了一些,,Go

具有高生產力的原因如下:

1.不一定需要IDE

我主要使用的開發(fā)工具一個是liteIDE,另外一個就是Vim,,特別是在自己實驗一些好

的想法時,,Vim用的更多。Go開發(fā)的簡潔和對其它第三方組件無依賴性,,決定了Go可以在任

何地方寫,,任何地方運行。曾經我嘗試過用Vim去寫Java,,結果無奈放棄了這個想法,。對于很

多環(huán)境下來說,,不依賴IDE是很重要的,。


2.極快的編譯構建速度

以前編譯C++,Erlang程序,,離開座位去喝杯茶,,吹吹牛是很正常的事。但是自從用

了Go,這種閑逛行為貌似變得更像在打醬油,,因為一個完整的項目最多僅僅需要數(shù)秒到數(shù)十秒?。?/span>

這個對于初接觸Go的同學來說,,很神奇,;這個對于提高程序員項目組的生產力來說,很重要,!


3.極其優(yōu)秀的標準庫

使用Go的標準庫也是非常享受的,。從標準庫的設計就能看得出,創(chuàng)建Go語言的那幾位圖

靈獎大神,不僅僅有異常深厚的理論儲備,,還有著非常豐富,、非常廣泛的生產實踐經驗,因為Go

語言解決了很多真實系統(tǒng)設計中,,常常會遇到的問題,。例如,可以非常簡單的使用http服務,、為

socket設置讀寫超時,、統(tǒng)計服務器信息、單元測試壓力測試,、多樣化的性能測試等等,,所有這些

讓寫出高可用、高性能的服務簡單了數(shù)倍,!


4.多樣化的內置數(shù)據(jù)結構

Map是我使用非常多的數(shù)據(jù)結構-大概10-20%的代碼都使用了Map,。因此作為一個靜態(tài)

語言,Go把Map內置為標準的數(shù)據(jù)類型,,是非常棒的,,大大簡化了使用步驟,提升了性能,。

Go語言中的動態(tài)數(shù)組-slice,,對于實際使用中也是非常關鍵的,配合內置函數(shù)append

和range,,slice的使用靈活度令難以置信,。

通過這些內置數(shù)據(jù)結構和內置函數(shù),Go程序員在處理各種數(shù)據(jù)結構時就掌握了既標準

又強大的武器,,也是Go語言之所簡潔的原因之一,。


5.統(tǒng)一的代碼格式規(guī)范

不知道大家有沒有做過項目總結,根據(jù)我多年的經驗,,項目中有一些最浪費時間的地方,,

其中一個地方就是代碼格式問。在各大論壇,、各大語言板塊都充斥著括號位置,、空格、縮進的

討論,,這些討論在Go語言中都可以打住了,。go fmt可以自動幫們處理好這些問題,讓我們的每

個源碼文件的代碼格式都是統(tǒng)一規(guī)范的,。在實際應用中,,這個特性可以大大提高團隊的開發(fā)效率:

最簡單的,,寫代碼時,你再也不用在=兩邊,,函數(shù)參數(shù)的后面等地方加上空格了,,只要輸入

go fmt myProject,一切問題都煙消云散,。


6.只有一個的二進制可執(zhí)行文件

使用過Go語言的同學,,應該都知道程序編譯后僅僅生成一個可執(zhí)行的二進制文件,非常

方便,,但是我仍然認為我們大低估了這個語言特性的好處,,特別是在項目的后續(xù)開發(fā)、維護過程

中?,F(xiàn)在社會,,網絡帶寬和存儲設備都不再昂貴,但是部署,、配置,、管理、升級各種軟件服務的

代價還是較為高昂的,。如果大家自己管理過多個系統(tǒng),、集群,就會知道:升級或安裝依賴庫,、JDK等

組件時,,總會碰到特別痛苦的時候,幾天的加班加點搞定一個問題都有可能,!而純Go寫的程序則不

一樣,,不管項目處于在哪個階段,我們需要的也僅僅是一個binary文件,,對于提高生產力來說,,這個

無疑是非常巨大的。


7.完善的標準測試框架

Go的測試框架是非常棒的,,和其它語言不同的是:我們僅僅使用Go語言自帶的標準化測試

框架,,就可以很好實現(xiàn)各種測試功能:單元,,黑盒,,白盒,壓力測試等等,。除了標準測試外,,還有很

多第三方的優(yōu)秀測試框架,但是要記住的是:最好只使一套測試框架,,這樣能保持項目的完整性和

一致性,。就筆者的經驗來看,,目前的標準測試框架足夠用了,如果需要單步斷點可以看這里,。


8.性能分析

Go語言自帶標準的性能分析工具,,包括CPU、內存,、阻塞操作(http請求,,數(shù)據(jù)庫請求,

time.Sleep等)在內的都可以測,,influxdb就是利用這些工具實現(xiàn)了數(shù)據(jù)庫的常量時間訪問,。

9.那么對于網上常常被噴的那些所謂的Go的‘問題’呢?

1)GC

Go語言從1.3開始,,GC的改進就在持續(xù)進行中,,1.5中,GC改成三色mark and 

sweep后,,性能得到了極大的提高,,在1.6中,對于內存占用很高,、對象很多的系統(tǒng)又進行了一

次大優(yōu)化,,可以說,現(xiàn)在的Go程序一般不存在GC問題,,除非:分布式緩存,、數(shù)據(jù)庫、消息推送

這樣海量對象的場景,,這時候需要自己做好可復用對象管理,、合并部分小對象、將一些小型的struct

結構定義為值類型而不是指針類型,、還可以從業(yè)務層面和架構層面進行優(yōu)化設計等等,。

不過,雖然說不太需要擔心GC問題,,但是大家還是最好學習一下Go的GC原理和

內存管理,,理解底層原理對于很多時候快速的定位解決問題是大有裨益的。

PS: 2016年7月7日補充,,昨天看到一個使用GO作為核心語言的國外大型視頻直播

網站分享了關于GC的演變史,,直接說結果吧:1.2版本的時候,GC STW時間是2秒左右,,到了1.6版本

再結合一些GC參數(shù)調優(yōu),,達到了30-50ms的級別,目前的1.7版本由于將一些STW工作放到了并發(fā)去

執(zhí)行,,因此GC時間到了1m級別,,整整上千倍的提升,,基本上延時已經不是問題了。后續(xù)版本將進一步

改進STW問題,,同時大大改善GC的吞吐率,。

2)泛型

其實剛從其它語言過來時,我或多或少會在寫Go代碼時用到模版的思想,,但是后

面發(fā)現(xiàn),,這樣會讓代碼更難維護,因此,,寫Go代碼就要用Go的哲學和思想,。

寫過C++代碼的都知道:抽象是一把雙刃劍,過度的抽象就可能存在潛在的問題,。

我看來,,Go所具有的OO思想,是簡潔的,,是純粹的,,是組合的核心思想。

編程現(xiàn)在就是化繁為簡,,充分利用組合的思想(也是Unix程序設計提倡的思想),,可

以讓我們的開發(fā)模型和項目代碼大大簡化、返璞歸真 ,。Go的OO思想充分體現(xiàn)了三位大神作者的

編程和設計功底,,估計也只有Unix的作者才能寫出這么完美的OO實現(xiàn)了!

3)GOPATH

對于新手來說,,GOPATH很難理解清楚,,我當時剛接觸時,也是迷糊了一段時間,。

現(xiàn)在則是混合了兩種方式,,第一種,在默認的GOPATH下的src中存放項目,;第二種,,自定義一個

臨時的GOPATH,然后存放項目,。后者的獨立性更好,,但是全局使用go build ,go test等命令時就

會有問題,比如手動導出

GOPATH才行:

mkdir sunface cd sunface-bench/export GOPATH=$PWDgo get -v github.com/otoolep/bleve-benchgo install github.com/otoolep/bleve-bench/cmd/bench/.$GOPATH/bin/bench -h
10.Go語言的總結

Go從出身來看更像學院派語言,,但是實際上它是徹頭徹尾的工程語言,,特別是它很適合

我們團隊,很適合基礎架構,、中間件,、云計算平臺、PasS平臺的開發(fā),,因為說它是云時代的未來第

一語言,,絲毫不為過。

就我這邊的項目而言,,分布式日志平臺,、搜索系統(tǒng)、消息推送等項目中,,避免了JVM或者

EVM的麻煩,,實在是太美好了,所以,,如果條件允許,,我會完全選擇純Go來設計實現(xiàn)一個系統(tǒng),也

許這種美妙只有真正深入用過的人才能體會 ;)

11.廣告時間

歡迎大家加入Golang隱修會,QQ群894864,,網站corego.org(還在制作中),,歡迎加入這個大

家庭,這里有所有你想要的,,而且熱心大神很多哦,!


    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多