go語言的抽象能力很差 go語言發展前景 知乎

如何評價Go在百度BFE的應用?

首先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。這肯定不能接受。

我正在學習Go語言網絡編程部分,太抽象了有點看不懂啊,哪位大神能夠通俗易懂給我解釋下這個代碼的意思啊

本質上,是作為文件處理的,發送是“write,print”,接受是“read”。

連接相當于打開文件。

為什么要使用 Go 語言?Go 語言的優勢在哪里

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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 亚洲一级特黄大片无码毛片| 国产精品无码AV不卡| 久久久久久国产精品无码下载 | 国产AV无码专区亚洲AV麻豆丫| 亚洲日韩中文字幕无码一区| 成人无码午夜在线观看| 久久精品无码午夜福利理论片| 色综合热无码热国产| 色窝窝无码一区二区三区色欲| 五月婷婷无码观看| 亚洲精品无码专区| 少妇无码AV无码专区在线观看| 亚洲AV无码一区二三区| 亚洲私人无码综合久久网| 成人无码AV一区二区| 国产成人无码a区在线观看视频免费| 曰韩精品无码一区二区三区 | 国产成人亚洲综合无码精品| 色欲A∨无码蜜臀AV免费播| 全免费a级毛片免费看无码| 无码人妻丰满熟妇区免费| 亚洲精品无码永久在线观看 | 国产精品无码免费播放| 无码人妻精品一区二区三区夜夜嗨 | 人妻中文字幕AV无码专区| 亚洲日韩乱码中文无码蜜桃臀| 中文字幕精品无码一区二区| 性色av无码免费一区二区三区| 无码人妻精品一区二区三区99性| 亚洲精品一级无码中文字幕| 国产av无码久久精品| 久久亚洲AV成人无码国产最大| 最新无码人妻在线不卡| 精品无码人妻一区二区三区| 无码人妻黑人中文字幕| 日韩精品无码久久久久久 | 日韩精品无码免费专区网站| 亚洲国产综合无码一区二区二三区 | 无码人妻丰满熟妇区BBBBXXXX| 精品久久无码中文字幕| 曰韩人妻无码一区二区三区综合部|