部署簡單。Go編譯生成的是一個靜態(tài)可執(zhí)行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和Python有著巨大的區(qū)別。由于歷史的原因,Python的部署工具生態(tài)相當(dāng)混亂【比如setuptools,distutils,pip,
10年積累的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有濟(jì)南免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
buildout的不同適用場合以及兼容性問題】。官方PyPI源又經(jīng)常出問題,需要搭建私有鏡像,而維護(hù)這個鏡像又要花費不少時間和精力。
并發(fā)性好。Goroutine和channel使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來的各種問題。單個Go應(yīng)用也能有效的利用多個CPU核,并行執(zhí)行的性能好。這和Python也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫起來并不簡單,而且由于全局鎖GIL的原因,多線程的Python程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫里的multiprocessing包又會對監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的supervisor管理進(jìn)程,對fork支持不好】。部署Python應(yīng)用的時候通常是每個CPU核部署一個應(yīng)用,這會造成不少資源的浪費,比如假設(shè)某個Python應(yīng)用啟動后需要占用100MB內(nèi)存,而服務(wù)器有32個CPU核,那么留一個核給系統(tǒng)、運行31個應(yīng)用副本就要浪費3GB的內(nèi)存資源。
良好的語言設(shè)計。從學(xué)術(shù)的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設(shè)計是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎(chǔ)的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團(tuán)隊協(xié)作的一致性。比如gofmt自動排版Go代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行g(shù)ofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有g(shù)ofix,
govet等非常有用的工具。
執(zhí)行性能好。雖然不如C和Java,但通常比原生Python應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。
匯編語言
由于機(jī)器語言不方便人們的識別和記憶,人們就發(fā)明了以標(biāo)識符來代替機(jī)器語言命令也就有了匯編語言,亦稱為符號語言,也是屬于低級語言。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機(jī)器語言指令集,特定的匯編語言和特定的機(jī)器語言指令集是一一對應(yīng)的,但不同的是由于設(shè)備不同,平臺之間不可直接移植,也就是你不能把電腦的指令集延用到電飯鍋上
匯編語言采用人類容易記憶和識別的助記符來代表一些0和1的指令,比如AND代表加法。
高級語言
C、C++、Java、Python、Ruby、易語言等都是高級語言,相對于低級語言來說,高級語言易于識別和記憶,也更接近人類的思維方式,編寫容易讀寫性好,開發(fā)效率更高。目前從業(yè)都大多都學(xué)習(xí)高級語言
重點是,高級語言是可移植的,做少量修改甚至無需修改,即可將代碼運行在不同平臺的計算機(jī)上。
編譯型語言和解釋型語言(相對于高級語言而言)。
高級語言的可移植性是基于編譯或者解釋這個過程,對人類友好的高級語言只有經(jīng)過處理才能被操作系統(tǒng)識別并加載到計算機(jī)硬件上最終執(zhí)行。
高級語言的編譯和解釋都是面向操作系統(tǒng)而言,并非面對計算機(jī)硬件。
編譯型語言
編譯就是把一個事先編好的叫做“編譯程序”的機(jī)器語言程序安裝在計算機(jī)內(nèi),當(dāng)需要執(zhí)行高級語言程序時,編譯程序就把整個“高級語言的源程序”翻譯成“機(jī)器語言的目標(biāo)程序”。
解釋型語言
高級語言進(jìn)入計算機(jī)后,解釋程序一邊掃描一邊解釋,逐句輸入逐句翻譯,計算機(jī)一行一行執(zhí)行,并不產(chǎn)生目標(biāo)程序。
比如JAVA就是一種解釋型高級語言。
編譯型語言執(zhí)行速度快,不依賴語言環(huán)境運行,跨平臺差
解釋型跨平臺好,一份代碼,到處使用,缺點是執(zhí)行速度慢,依賴解釋器運行.
不會成為web主流
go是設(shè)計初衷來做系統(tǒng)應(yīng)用和取代C++的....
目前主要用傳統(tǒng)編譯型語言編譯成機(jī)器碼的形式...
和web開發(fā)的跨平臺標(biāo)準(zhǔn)化等特性有距離...
會成為很方便系統(tǒng)應(yīng)用開發(fā)、客戶端開發(fā)的語言...