我最早使用的語言是Java和Python, 并且一直都對Python充滿好感, 我喜歡這種很樸實和高效率的感覺, 但我卻最后沒有采用Python,原因其實也很簡單, 我就是不喜歡縮進語法, 就跟很多人換工作僅僅是為了屏幕更大一點一樣, 另外就是有了同樣很棒的可選方案, 這就是Ruby, 所以我最終采用了Ruby作為主力編程語言, 同樣也為不能使用Python而有一點小遺憾,畢竟Python的健壯性比Ruby好很多,只不過Ruby也一直在進步, 所以這一點無傷大雅
成都創(chuàng)新互聯(lián)公司憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十載的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都數(shù)千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。
我們都知道,無論是Python還是Ruby,甚至Java, 都是在解決業(yè)務(wù)層的問題, 屬于應(yīng)用型語言, 以解決業(yè)務(wù)邏輯為主, 但還有一個領(lǐng)域是系統(tǒng)領(lǐng)域,偏網(wǎng)絡(luò)層和底層操作,在這一塊我一直在尋找一種優(yōu)雅的方案, C++被我首先給淘汰掉了, C的開發(fā)效率太低, Java倒是比較合適, 就是太臃腫,而且缺少系統(tǒng)編程的基因,畢竟它是企業(yè)級開發(fā)出身的
最后我選擇了Erlang, 因為它在網(wǎng)絡(luò)層方面表現(xiàn)優(yōu)秀, 同時容錯性和健壯性都很不錯, 它的虛擬機是唯一可以跟JVM媲美的, 而且還有OTP的超重量級武器, 幾乎可以是通殺網(wǎng)絡(luò)層應(yīng)用, 但根據(jù)我的總結(jié)它有一個硬傷和一個軟肋,這一點后面展開,可以說選擇Erlang是我目前所知道的方案里面是最優(yōu)的
直到有一天我了解了Golang, 我知道Golang其實也蠻早的, 大概08年的時候就知道Google在搞一門奇怪的語言, 之后的幾年,一直有不少以老莫為代表的人在嘀咕Golang, 其實我一直沒太關(guān)注,我從ROR中吸取的經(jīng)驗是,成熟度對于商用很重要, 后來基于Golang開發(fā)的產(chǎn)品越來越多,讓我不得不去研究一下, 這我才知道, 這就是我夢想中的Python, 效率和性能達(dá)到了最佳的平衡,對Go了解越多, 就越不愿意用Erlang寫代碼,主要原因:
1、Erlang的硬傷在于代碼的可讀性、表現(xiàn)力, 讓我來舉個小例子, 比如你為你的系統(tǒng)軟件構(gòu)建一個RESTFUL的接口,我們大致了解一下代碼風(fēng)格,先不說Erlang, 無論是你c/c++/python/ruby/java 出身, 對Go是不是有種很久違的感覺, 為什么說是硬傷? 因為對一門語言來說,語法是不大可能會大幅度變更的, 而且不會出現(xiàn)大的變化, 我不知道有沒有人讀過《松本行弘的編程世界》,里面闡述的道理很明白, 真正好的編程方式是人去主宰計算機而不是計算機主宰人, 我感覺Erlang就有點主宰我的編程思維的感覺(我的視力本身就不好,它還在不斷的扼殺我的眼睛!), 編程首先是門邏輯學(xué),其次是工程學(xué),最后才是數(shù)學(xué), 又讓我想起吳軍的《數(shù)學(xué)之美》所說的, 人工智能上個世紀(jì)一直在走彎路, 期望機器的高度圖靈完備, 而忽視人類本身已有的文明,統(tǒng)計歸納的應(yīng)用
2、Erlang的軟肋在于高質(zhì)量的庫少,盡管有不少殺手級應(yīng)用, 同樣Go在這方面也是軟肋, 這一點對于一個不到五年的語言有情可原, 但對于一個20多年的語言是不是有點說不過去, 比如你用json解析庫,很多人都是從mochiweb這個基本不更新的庫中去抽取, 而我認(rèn)為對于類似json這種東西可以考慮融入到語言標(biāo)準(zhǔn)庫中, 因為未來的商業(yè)軟件的api化趨勢越來越明顯,說的難聽點 , 一個倚老賣老一個與時俱進,反正我對Golang的庫一點也不擔(dān)心, 目前的成績易經(jīng)非常棒了, 遠(yuǎn)遠(yuǎn)優(yōu)于Ruby/Python的前五年, 可參見已有的高質(zhì)量的庫列表
3、Erlang不合群, 這主要體現(xiàn)在跟其他語言的交互性上, 當(dāng)然這也有深層次的原因, Erlang本身有自己的哲學(xué), 如出錯恢復(fù)機制, 你融入一個其他語言的東西進去, 這帳就不好算,就好比你硬要讓一個喝咖啡的跟一個吃大蒜的坐在一起, 總之你寫一個Erlang的port遠(yuǎn)遠(yuǎn)比Go復(fù)雜, 甚至比Python/Java還要復(fù)雜, 這就造成了Erlang在底層編程上效果不是很好, 沒法利用linux已有的很多優(yōu)秀成果,我一直認(rèn)為Erlang的什么的mysql/pg/oracle驅(qū)動都沒有必要存在, Erlang一定是一個self-container應(yīng)用, 你只要用到了其他東西, 根據(jù)木桶理論, 你就不敢號稱9個9,以系統(tǒng)的眼光看問題, 我覺得一個系統(tǒng)的魯棒性不能依賴于某一組件, 這也是為什么愛立信本身的Erlang應(yīng)用并不廣泛
4、說說數(shù)據(jù)類型吧, 我不止聽到1個人說Erlang對字符串的處理不有好, 它把string當(dāng)做list來處理,其實本質(zhì)上是該這么,但,還是那句話, 違背了面向人的哲學(xué), 應(yīng)該做一些DSL, 比如Golang里面的 := 就是一個糖衣, 等價于 var xx yyy = zzzz, 大大方便的程序員少敲不少字符, Golang里面對字符轉(zhuǎn)可以說基本和python差不多, slice map函數(shù)很強大, 支持lambda條件,雖然Erlang的基本類型很少, 但有很多構(gòu)造, 所謂構(gòu)造等價于Golang里面復(fù)雜的struct, 也奇怪了,我就是感覺Erlang構(gòu)造傷眼睛好嗎?可能是各種括號的比對的原因吧, 而且我認(rèn)為這是不必要的, 顯然Erlang缺少DSL的基因, 當(dāng)然跟Erlang出身的年代有關(guān), 我不夸張的說, 自打用Erlang以后我的視力又下降了100度左右, 我不是很喜歡lisp所說的符號也是一種語法, 可能這又跟函數(shù)式編程有關(guān)吧:形式推導(dǎo)遠(yuǎn)大于邏輯演繹
5、其實我最不關(guān)注的是性能問題, 因為隨著摩爾定律, 單位計算單元的性價比會無限高,但Golang既然提出它的性能逼近C, 那我還是提一下吧, 當(dāng)然, Erlang也還可以, 雖然比Java慢, 但跟Python一個檔次吧
6、再談?wù)剤箦e機制, 因為Erlang的的報錯信息太讓人糾結(jié)了, 起初以為我不會看出錯信息, 后來也使用了Sasl, 還是不夠直觀,甚至有時要用工具分析crash文件來定位問題,還是跟Erlang的哲學(xué)有關(guān), 在Erlang中一切都是并行的, 所以它根本不care是物理哪一行出錯, 只跟Actor綁定, 然后告訴你Actor的ID和出錯代號, 你自己憑經(jīng)驗去分析吧,這樣做的好處是可以很方便定位出并行中出現(xiàn)的問題,但凡事都是相對的, 在這一點上有點糾枉過正,根據(jù)我的經(jīng)驗, 絕大部分時候我只希望先給我明確的指出哪一行出錯了好嗎? 甚至把順序的backtrace用完整的英文句子打印出來好嗎?至于并行中的錯誤及時在命令式多線程語言中是不常見的,雖然并不是沒有, 但遇到錯誤我再費勁去調(diào)試好了, 但并不是所有的邏輯都用并行的思維去定位問題, 我甚至認(rèn)為, 對于一個系統(tǒng)不完全是并行也不完全是串行,跟好比我們衡量世界不能單純的唯物也不能完全的唯心一樣, 這一點Golang就做了很好的折中, 不需要并行的時候你老老實實的寫串行代碼, 需要并行的時候也有較復(fù)雜的機制來應(yīng)對, 合乎情理
7、再說說招人吧, 以前招過好幾個C出來的人,說實話水平很好, 可以一周就完成一個小組件, libevent用的熟的很,后來我逼人家用Erlang,結(jié)果把人家逼走了,至今我還很后悔, 自己的一廂情愿強加在別人身上真是太不合適了,但我招純Erlang出來的人,可以說比招objc的人還難, 沒有人,空談技術(shù)的優(yōu)雅性首先就是不靠譜的,再看看郵件列表, Golang的活躍度明顯比Erlang高很多, 基本逼近Ruby,更重要的是, 我根本不擔(dān)心Golang的人才,因為只要熟悉Python/C/Ruby/或者C++, 基本可以實現(xiàn)半天入門, 之后就可以噼里啪啦邊搜資料邊干活了,雖然有足夠的深度,但門檻極其平緩,工程人員也可以復(fù)用很多已有的知識。 Erlang在這一點其實跟第一點硬傷有關(guān),大部分人學(xué)一周都摸不著頭腦,不是每個人的抽象思維和世界觀都是一樣的好嗎, 所以函數(shù)式編程盡管不比命令式語言起步晚,但始終學(xué)的人很少,這就是歷史, 對于大部分人, 更希望解決問題,創(chuàng)造價值, 而不是數(shù)學(xué)來推導(dǎo)去
8、最后我建議, 如果你是玩c/c++的, 現(xiàn)在開始學(xué)Golang,是最好的時機, 跟一門靠譜的語言一起成長, 這種感覺非常棒, 你用Erlang折騰1個應(yīng)用, 用Go恐怕都完成了10個開源項目, 當(dāng)然,也要結(jié)合自己的口味, Golang就是Sublime Text, Erlang就是Emacs
相信自己的判斷,相信自己的邏輯, 贏就是贏,輸就是輸
轉(zhuǎn)載僅供參考,版權(quán)屬于原作者。祝你愉快,滿意請采納哦
作為一個測試,作為一個測試開發(fā), 全棧化+管理 是我們未來的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。
Go 是一個開源的編程語言 ,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)。這三個人都是計算機界的大神,有的參與了C語言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計算機最高榮譽-圖靈獎。
接下來說說 Go語言的特色 :
簡潔、快速、安全
并行、有趣、開源
內(nèi)存管理、數(shù)組安全、編譯迅速
Go語言的用途 :
Go 語言被設(shè)計成一門應(yīng)用于搭載 Web 服務(wù)器,存儲集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。
對于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對于 游戲 服務(wù)端的開發(fā)而言是再好不過了。
Go語言的環(huán)境安裝:
建議直接打開 官方地址因為墻的原因打不開
因為我用的是windows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語言來編程。
Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。
默認(rèn)情況下 .msi 文件會安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個人建議還是安裝到 Program Files文件夾中。
使用什么開發(fā)工具來對Go語言進行編寫:
個人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時你需要在VS code中下載Go語言的擴展插件。
這里有一個巨大的坑,就是在下載Go的插件和依賴包時,會提示一些包沒有。主要是因為下載的依賴包部分被墻了,只能想別的辦法去下載。
建議參考網(wǎng)頁:
解決vscode中g(shù)olang插件安裝失敗方法
在學(xué)習(xí)go的過程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對你有所幫助,也可以點開原博主鏈接參考:
Go有一個全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個藍(lán)色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我們打開VsCode界面,下面會提示安裝插件,我們選擇Install ALL,就會安裝成功
當(dāng)你在運行Go語言程序時,提示所有的插件包都已經(jīng)安裝成功了時,就可以正常使用了,要不然一堆報錯會讓你非常心煩。
好了,今天先到這里,晚安、下班~
Go語言是谷歌推出的一種全新的編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā)Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪。
Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應(yīng)用的一種BASIC語言.
北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗到了從未有過的開發(fā)效率。"派克表示,今天的C++或C一樣,Go是一種系統(tǒng)語言。他解釋道,"使用它可以進行快速開發(fā),同時它還是一個真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認(rèn)為它已經(jīng)非常有用和強大。"
2007年,谷歌把Go作為一個20%項目開始研發(fā),即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發(fā)。
派克表示,編譯后Go代碼的運行速度與C語言非常接近,而且編譯速度非常快,就像在使用一個交互式語言。現(xiàn)有編程語言均未專門對多核處理器進行優(yōu)化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學(xué)者設(shè)計的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο螅揖哂姓嬲拈]包(closures)和反射 (reflection)等功能。
在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類似,對于Java開發(fā)者來說,應(yīng)該能夠輕松學(xué)會 Go。之所以將Go作為一個開源項目發(fā)布,目的是讓開源社區(qū)有機會創(chuàng)建更好的工具來使用該語言,例如 Eclipse IDE中的插件。
在谷歌公開發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應(yīng)用完美的運行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。
Go 同時具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設(shè)備的支持。派克表示,"Android手機存在的問題是,我們一直沒有一個數(shù)學(xué)協(xié)處理器。"
新聞標(biāo)題:GO語言學(xué)習(xí)軟件數(shù)學(xué),go語言自學(xué)
標(biāo)題URL:http://chinadenli.net/article38/dsichpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、手機網(wǎng)站建設(shè)、搜索引擎優(yōu)化、域名注冊、用戶體驗、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)