欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

如何評價(jià)Go在百度BFE的應(yīng)用?

首先BFE(baidu front end)這個(gè)項(xiàng)目是一個(gè)功能類似于nginx的項(xiàng)目,并不是大家傳統(tǒng)意義上理解的前端(html+css+js)。之所以稱作“frontend”是因?yàn)樗鄬τ谡麄€(gè)應(yīng)用是處于最前面直接處理用戶的http請求的。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、臨翔網(wǎng)站維護(hù)、網(wǎng)站推廣。

一開始這個(gè)項(xiàng)目是使用c語言寫的,因?yàn)闃I(yè)界大多數(shù)http服務(wù)器也都是使用c來開發(fā)的(如apache、nginx)這段時(shí)期稱作c-BFE時(shí)期。

但是到后期,這個(gè)項(xiàng)目遇到了一些問題:

c語言的開發(fā)效率太低了

c語言應(yīng)對需求變更比較吃力

c語言抽象能力不足

c語言需要手動管理內(nèi)存(有些不很優(yōu)秀的組員會寫出導(dǎo)致內(nèi)存泄漏的代碼)

bug越改越多,穩(wěn)定性和功能是一對矛盾

c語言程序員不好招

所以問題基本上是出在c語言不適應(yīng)了現(xiàn)在互聯(lián)網(wǎng)的快速變更的需求。之后百度決定重寫這個(gè)項(xiàng)目。

那么在開發(fā)效率上,golang基本上是滿足了百度的需求。首先BFE組有很多優(yōu)秀的c/c++的程序員了,他們轉(zhuǎn)go幾乎沒有什么壓力。對于一些不那么優(yōu)秀的c程序員(比如經(jīng)常漏內(nèi)存的),用golang之后也不會導(dǎo)致一些低級錯誤了。所以在學(xué)習(xí)成本上,更換golang對百度影響不大。

另外,golang本身的并發(fā)模型、語言的描述能力、和內(nèi)存管理等功能,也超過了c語言。所以整體上,開發(fā)效率得到了很大的提升。

使用golang遇到的最大的一個(gè)問題就是gc帶來的問題。李炳毅老師也重點(diǎn)是講解了baidu如何解決gc帶來的延遲問題。

在golang的1.3版本,百度的實(shí)際測試下,10k個(gè)對象大概會帶來1ms的延遲。而BFE一般會維持50萬左右的連接數(shù),如果不對golang的gc做任何優(yōu)化的情況下,100萬鏈接大概會帶來400ms的延遲。相當(dāng)于一個(gè)http請求還沒有打到應(yīng)用上,單單在nginx上就耗費(fèi)了400ms。這肯定不能接受。

我正在學(xué)習(xí)Go語言網(wǎng)絡(luò)編程部分,太抽象了有點(diǎn)看不懂啊,哪位大神能夠通俗易懂給我解釋下這個(gè)代碼的意思啊

本質(zhì)上,是作為文件處理的,發(fā)送是“write,print”,接受是“read”。

連接相當(dāng)于打開文件。

為什么要使用 Go 語言?Go 語言的優(yōu)勢在哪里

1. 保留但大幅度簡化指針

Go語言保留著C中值和指針的區(qū)別,但是對于指針繁瑣用法進(jìn)行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔(dān)心會因?yàn)橹苯硬僮鲀?nèi)寸而引起各式各樣的錯誤。

2. 多參數(shù)返回

還記得在C里面為了回饋多個(gè)參數(shù),不得不開辟幾段指針傳到目標(biāo)函數(shù)中讓其操作么?在Go里面這是完全不必要的。而且多參數(shù)的支持讓Go無需使用繁瑣的exceptions體系,一個(gè)函數(shù)可以返回期待的返回值加上error,調(diào)用函數(shù)后立刻處理錯誤信息,清晰明了。

3. Array,slice,map等內(nèi)置基本數(shù)據(jù)結(jié)構(gòu)

如果你習(xí)慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那么熟悉,而且更加高效。如果你是C++程序員,你會發(fā)現(xiàn)你又找到了STL的vector 和 map這對朋友。

4. Interface

Go語言最讓人贊嘆不易的特性,就是interface的設(shè)計(jì)。任何數(shù)據(jù)結(jié)構(gòu),只要實(shí)現(xiàn)了interface所定義的函數(shù),自動就implement了這個(gè)interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設(shè)計(jì)度和OO抽象度,讓你的代碼也非常干凈。千萬不要以為你習(xí)慣了Java那種一條一條加implements的方式,感覺還行,等接口的設(shè)計(jì)越來越復(fù)雜的時(shí)候,無數(shù)Bug正在后面等著你。

同時(shí),正因?yàn)槿绱?,Go語言的interface可以用來表示任何generic的東西,比如一個(gè)空的interface,可以是string可以是int,可以是任何數(shù)據(jù)類型,因?yàn)檫@些數(shù)據(jù)類型都不需要實(shí)現(xiàn)任何函數(shù),自然就滿足空interface的定義了。加上Go語言的type assertion,可以提供一般動態(tài)語言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯誤。

5. OO

Go語言本質(zhì)上不是面向?qū)ο笳Z言,它還是過程化的。但是,在Go語言中, 你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這里,不需要class,仍然可以繼承,仍然可以多態(tài),但是速度卻快得多。因?yàn)楸举|(zhì)上,OO在Go語言中,就是普通的struct操作。

6. Goroutine

這個(gè)幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不了解Goroutine,那么你只需要知道,這玩意是超級輕量級的類似線程的東西,但通過它,你不需要復(fù)雜的線程操作鎖操作,不需要care調(diào)度,就能玩轉(zhuǎn)基本的并行程序。在Go語言里,觸發(fā)一個(gè)routine和erlang spawn一樣簡單?;旧弦莆誈o語言,以Goroutine和channel為核心的內(nèi)存模型是必須要懂的。不過請放心,真的非常簡單。

7. 更多現(xiàn)代的特性

和C比較,Go語言完全就是一門現(xiàn)代化語言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language類似), function是first class object,等等等等。

看到這里,你可能會發(fā)現(xiàn),我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點(diǎn)。我想說的是,一點(diǎn)都不夸張,連Go語言的入門學(xué)習(xí)到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時(shí)代,對于Go語言,從入門到能夠上手做項(xiàng)目,最多不過半個(gè)月。Go語言給人的感覺就是太直接了,什么都直接,讀源代碼直接,寫自己的代碼也直接。

文章名稱:go語言的抽象能力很差 go語言發(fā)展前景 知乎
文章轉(zhuǎn)載:http://chinadenli.net/article16/dodesgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)微信小程序、營銷型網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作、網(wǎng)站改版微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)