首先BFE(baidu front end)這個項目是一個功能類似于nginx的項目,并不是大家傳統意義上理解的前端(html+css+js)。之所以稱作“frontend”是因為它相對于整個應用是處于最前面直接處理用戶的http請求的。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、虛擬主機、營銷軟件、網站建設、臨翔網站維護、網站推廣。
一開始這個項目是使用c語言寫的,因為業界大多數http服務器也都是使用c來開發的(如apache、nginx)這段時期稱作c-BFE時期。
但是到后期,這個項目遇到了一些問題:
c語言的開發效率太低了
c語言應對需求變更比較吃力
c語言抽象能力不足
c語言需要手動管理內存(有些不很優秀的組員會寫出導致內存泄漏的代碼)
bug越改越多,穩定性和功能是一對矛盾
c語言程序員不好招
所以問題基本上是出在c語言不適應了現在互聯網的快速變更的需求。之后百度決定重寫這個項目。
那么在開發效率上,golang基本上是滿足了百度的需求。首先BFE組有很多優秀的c/c++的程序員了,他們轉go幾乎沒有什么壓力。對于一些不那么優秀的c程序員(比如經常漏內存的),用golang之后也不會導致一些低級錯誤了。所以在學習成本上,更換golang對百度影響不大。
另外,golang本身的并發模型、語言的描述能力、和內存管理等功能,也超過了c語言。所以整體上,開發效率得到了很大的提升。
使用golang遇到的最大的一個問題就是gc帶來的問題。李炳毅老師也重點是講解了baidu如何解決gc帶來的延遲問題。
在golang的1.3版本,百度的實際測試下,10k個對象大概會帶來1ms的延遲。而BFE一般會維持50萬左右的連接數,如果不對golang的gc做任何優化的情況下,100萬鏈接大概會帶來400ms的延遲。相當于一個http請求還沒有打到應用上,單單在nginx上就耗費了400ms。這肯定不能接受。
本質上,是作為文件處理的,發送是“write,print”,接受是“read”。
連接相當于打開文件。
1. 保留但大幅度簡化指針
Go語言保留著C中值和指針的區別,但是對于指針繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內寸而引起各式各樣的錯誤。
2. 多參數返回
還記得在C里面為了回饋多個參數,不得不開辟幾段指針傳到目標函數中讓其操作么?在Go里面這是完全不必要的。而且多參數的支持讓Go無需使用繁瑣的exceptions體系,一個函數可以返回期待的返回值加上error,調用函數后立刻處理錯誤信息,清晰明了。
3. Array,slice,map等內置基本數據結構
如果你習慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那么熟悉,而且更加高效。如果你是C++程序員,你會發現你又找到了STL的vector 和 map這對朋友。
4. Interface
Go語言最讓人贊嘆不易的特性,就是interface的設計。任何數據結構,只要實現了interface所定義的函數,自動就implement了這個interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設計度和OO抽象度,讓你的代碼也非常干凈。千萬不要以為你習慣了Java那種一條一條加implements的方式,感覺還行,等接口的設計越來越復雜的時候,無數Bug正在后面等著你。
同時,正因為如此,Go語言的interface可以用來表示任何generic的東西,比如一個空的interface,可以是string可以是int,可以是任何數據類型,因為這些數據類型都不需要實現任何函數,自然就滿足空interface的定義了。加上Go語言的type assertion,可以提供一般動態語言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯誤。
5. OO
Go語言本質上不是面向對象語言,它還是過程化的。但是,在Go語言中, 你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這里,不需要class,仍然可以繼承,仍然可以多態,但是速度卻快得多。因為本質上,OO在Go語言中,就是普通的struct操作。
6. Goroutine
這個幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不了解Goroutine,那么你只需要知道,這玩意是超級輕量級的類似線程的東西,但通過它,你不需要復雜的線程操作鎖操作,不需要care調度,就能玩轉基本的并行程序。在Go語言里,觸發一個routine和erlang spawn一樣簡單。基本上要掌握Go語言,以Goroutine和channel為核心的內存模型是必須要懂的。不過請放心,真的非常簡單。
7. 更多現代的特性
和C比較,Go語言完全就是一門現代化語言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language類似), function是first class object,等等等等。
看到這里,你可能會發現,我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點。我想說的是,一點都不夸張,連Go語言的入門學習到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時代,對于Go語言,從入門到能夠上手做項目,最多不過半個月。Go語言給人的感覺就是太直接了,什么都直接,讀源代碼直接,寫自己的代碼也直接。
文章名稱:go語言的抽象能力很差 go語言發展前景 知乎
文章轉載:http://m.kartarina.com/article16/dodesgg.html
成都網站建設公司_創新互聯,為您提供電子商務、微信小程序、營銷型網站建設、企業網站制作、網站改版、微信公眾號
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯