Go語言主要用作服務器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計算的網(wǎng)絡服務。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達性。
成都創(chuàng)新互聯(lián)公司主營鄂托克前網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都app軟件開發(fā),鄂托克前h5微信平臺小程序開發(fā)搭建,鄂托克前網(wǎng)站營銷推廣歡迎鄂托克前等地區(qū)企業(yè)咨詢
Go語言作為服務器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡編程方面,Go語言廣泛應用于Web應用、API應用、下載應用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫和云平臺領域,目前國外很多云平臺都是采用Go開發(fā)。
1、服務器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機處理、文件系統(tǒng)等。
2、分布式系統(tǒng)、數(shù)據(jù)庫代理器、中間件:例如Etcd。
3、網(wǎng)絡編程:這一塊目前應用最廣,包括Web應用、API應用、下載應用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡功能都實現(xiàn)了。
4、開發(fā)云平臺:目前國外很多云平臺在采用Go開發(fā),我們所熟知的七牛云、華為云等等都有使用Go進行開發(fā)并且開源的成型的產(chǎn)品。
5、區(qū)塊鏈:目前有一種說法,技術從業(yè)人員把Go語言稱作為區(qū)塊鏈行業(yè)的開發(fā)語言。如果大家學習區(qū)塊鏈技術的話,就會發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應用都是采用Go進行開發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有go語言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發(fā)布以來,go語言引起了眾多開發(fā)者的關注,并得到了廣泛的應用。go語言簡單、高效、并發(fā)的特點吸引了許多傳統(tǒng)的語言開發(fā)人員,其數(shù)量也在不斷增加。
使用 Go 語言開發(fā)的開源項目非常多。早期的 Go 語言開源項目只是通過 Go 語言與傳統(tǒng)項目進行C語言庫綁定實現(xiàn),例如 Qt、Sqlite 等。
后期的很多項目都使用 Go 語言進行重新原生實現(xiàn),這個過程相對于其他語言要簡單一些,這也促成了大量使用 Go 語言原生開發(fā)項目的出現(xiàn)。
最近三年,在工作中使用go開發(fā)了不少服務。深感go的便捷,以及它的runtime的復雜。我覺得需要定期的進行總結,因此決定寫這篇文章,也許更準確的,應該叫筆記。
最近終于解決了一個和cgo有關的問題。這個問題從發(fā)現(xiàn)到解決前后經(jīng)歷了接近4個月,當然,和人手不足也有關系。而對于我個人而言,這個問題其實歷時2年!這得從頭說起。
在上一家公司的一個項目里,有一個服務做音視頻數(shù)據(jù)的提取,這個服務運行在嵌入式設備TX2上。音視頻提取這一關鍵功能主要利用nvidia基于gstreamer開發(fā)的插件,這個插件可以發(fā)揮nvidia gpu的硬件解碼功能。當時這個服務使用go和c混編的方式,問題的癥狀是服務運行一段時間后,不輸出音視頻數(shù)據(jù)。遺憾的是,由于疫情,項目停止,因此沒有機會繼續(xù)研究這個問題。
時間來到去年底。當前這個項目進行壓力測試,發(fā)現(xiàn)關鍵的語音處理服務運行一段時間后,會出現(xiàn)不拉流的情況,因此也沒有后續(xù)的結果輸出。癥狀和上一個項目非常像。雖然使用的第三方SDK不一樣,但同樣用了go和c混編的方式。一開始,焦點就放在go的運行時上,覺得可能是go和c相互調(diào)用的方式不對。經(jīng)過合理猜測,并用測試進行驗證后,發(fā)現(xiàn)問題還是在第三方拉流的SDK上,它們的回調(diào)函數(shù)必須要快,否則有可能會阻塞它們的回調(diào)線程。當然,在go調(diào)用c的時候,如果耗時比較長,會對go的運行時造成一些副作用;在c回調(diào)go的時候,go的運行時也有可能阻塞c的回調(diào)線程。但go的運行時已經(jīng)比較成熟,因此我覺得它對這個問題的貢獻不大。以上采用了假設-驗證的方法,主要的原因還是第三方的拉流SDK不開源。在定位問題的過程中,使用了gdb的gcore來生成堆棧;也搭建了灰度環(huán)境來進行壓力測試,以及完善監(jiān)控,這些都是解決方法的一部分。
正是這一問題,促使我更多的了解go的運行時。而我看得越多,越覺得go的運行時是一個龐大的怪物。因此,抱著能了解一點是一點的心態(tài),不斷的完善這篇筆記。
1、Go作為Google2009年推出的語言,其被設計成一門應用于搭載 Web 服務器,存儲集群或類似用途的巨型中央服務器的系統(tǒng)編程語言。
2、對于高性能分布式系統(tǒng)領域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對于游戲服務端的開發(fā)而言是再好不過了。
3、到現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)。