很多朋友可能知道Go語言的優(yōu)勢在哪,卻不知道Go語言適合用于哪些地方。
在明水等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),明水網(wǎng)站建設(shè)費(fèi)用合理。
1、 Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡(luò)編程方面。Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫和云平臺領(lǐng)域,目前國外很多云平臺都是采用Go開發(fā)。
2、 其實(shí)Go語言主要用作服務(wù)器端開發(fā)。其定位是用來開發(fā)"大型軟件"的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性。
3、 Go語言成功案例。Nsq:Nsq是由Go語言開發(fā)的高性能、高可用消息隊(duì)列系統(tǒng),性能非常高,每天能處理數(shù)十億條的消息;
4、 Docker:基于lxc的一個(gè)虛擬打包工具,能夠?qū)崿F(xiàn)PAAS平臺的組建。
5、 Packer:用來生成不同平臺的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
6、 Skynet:分布式調(diào)度框架。
7、 Doozer:分布式同步工具,類似ZooKeeper。
8、 Heka:mazila開源的日志處理系統(tǒng)。
9、 Cbfs:couchbase開源的分布式文件系統(tǒng)。
10、 Tsuru:開源的PAAS平臺,和SAE實(shí)現(xiàn)的功能一模一樣。
11、 Groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)。
12、 God:類似redis的緩存系統(tǒng),但是支持分布式和擴(kuò)展性。
13、 Gor:網(wǎng)絡(luò)流量抓包和重放工具。
以上的就是關(guān)于go語言能做什么的內(nèi)容介紹了。
Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。
Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。
Go語言應(yīng)用范圍:
1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);
3、網(wǎng)絡(luò)編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
最近三年,在工作中使用go開發(fā)了不少服務(wù)。深感g(shù)o的便捷,以及它的runtime的復(fù)雜。我覺得需要定期的進(jìn)行總結(jié),因此決定寫這篇文章,也許更準(zhǔn)確的,應(yīng)該叫筆記。
最近終于解決了一個(gè)和cgo有關(guān)的問題。這個(gè)問題從發(fā)現(xiàn)到解決前后經(jīng)歷了接近4個(gè)月,當(dāng)然,和人手不足也有關(guān)系。而對于我個(gè)人而言,這個(gè)問題其實(shí)歷時(shí)2年!這得從頭說起。
在上一家公司的一個(gè)項(xiàng)目里,有一個(gè)服務(wù)做音視頻數(shù)據(jù)的提取,這個(gè)服務(wù)運(yùn)行在嵌入式設(shè)備TX2上。音視頻提取這一關(guān)鍵功能主要利用nvidia基于gstreamer開發(fā)的插件,這個(gè)插件可以發(fā)揮nvidia gpu的硬件解碼功能。當(dāng)時(shí)這個(gè)服務(wù)使用go和c混編的方式,問題的癥狀是服務(wù)運(yùn)行一段時(shí)間后,不輸出音視頻數(shù)據(jù)。遺憾的是,由于疫情,項(xiàng)目停止,因此沒有機(jī)會繼續(xù)研究這個(gè)問題。
時(shí)間來到去年底。當(dāng)前這個(gè)項(xiàng)目進(jìn)行壓力測試,發(fā)現(xiàn)關(guān)鍵的語音處理服務(wù)運(yùn)行一段時(shí)間后,會出現(xiàn)不拉流的情況,因此也沒有后續(xù)的結(jié)果輸出。癥狀和上一個(gè)項(xiàng)目非常像。雖然使用的第三方SDK不一樣,但同樣用了go和c混編的方式。一開始,焦點(diǎn)就放在go的運(yùn)行時(shí)上,覺得可能是go和c相互調(diào)用的方式不對。經(jīng)過合理猜測,并用測試進(jìn)行驗(yàn)證后,發(fā)現(xiàn)問題還是在第三方拉流的SDK上,它們的回調(diào)函數(shù)必須要快,否則有可能會阻塞它們的回調(diào)線程。當(dāng)然,在go調(diào)用c的時(shí)候,如果耗時(shí)比較長,會對go的運(yùn)行時(shí)造成一些副作用;在c回調(diào)go的時(shí)候,go的運(yùn)行時(shí)也有可能阻塞c的回調(diào)線程。但go的運(yùn)行時(shí)已經(jīng)比較成熟,因此我覺得它對這個(gè)問題的貢獻(xiàn)不大。以上采用了假設(shè)-驗(yàn)證的方法,主要的原因還是第三方的拉流SDK不開源。在定位問題的過程中,使用了gdb的gcore來生成堆棧;也搭建了灰度環(huán)境來進(jìn)行壓力測試,以及完善監(jiān)控,這些都是解決方法的一部分。
正是這一問題,促使我更多的了解go的運(yùn)行時(shí)。而我看得越多,越覺得go的運(yùn)行時(shí)是一個(gè)龐大的怪物。因此,抱著能了解一點(diǎn)是一點(diǎn)的心態(tài),不斷的完善這篇筆記。