Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)岢嵐,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。
Go語言能干什么?
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ò)編程:大量?jī)?yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(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ù)處理。
為什么golang的開發(fā)效率高?/olgolang是一編譯型的強(qiáng)類型語言,它在開發(fā)上的高效率主要來自于后發(fā)優(yōu)勢(shì),不用考慮舊有惡心的歷史,又有一個(gè)較高的工程視角。良好的避免了程序員因?yàn)椤?{ 需不需要獨(dú)占一行 ”這種革命問題打架,也解決了一部分趁編譯時(shí)間找產(chǎn)品妹妹搭訕的階級(jí)敵人。
它有自己的包管理機(jī)制,工具鏈成熟,從開發(fā)、調(diào)試到發(fā)布都很簡(jiǎn)單方便;有反向接口、defer、coroutine等大量的syntactic sugar;編譯速度快,因?yàn)槭菑?qiáng)類型語言又有g(shù)c,只要通過編譯,非業(yè)務(wù)毛病就很少了;它在語法級(jí)別上支持了goroutine,這是大家說到最多的內(nèi)容,這里重點(diǎn)提一下。首先,coroutine并不稀罕,語言并不能超越硬件、操作系統(tǒng)實(shí)現(xiàn)神乎其神的功能。golang可以做到事情,其他語言也可以做到,譬如c++,在boost庫里面自己就有的coroutine實(shí)現(xiàn)(當(dāng)然用起來跟其他boost庫一樣惡心)。golang做的事情,是把這一套東西的使用過程簡(jiǎn)化了,并且提供了一套channel的通信模式,使得程序員可以忽略諸如死鎖等問題。
goroutine的目的是描述并發(fā)編程模型。并發(fā)與并行不同,它并不需要多核的硬件支持,它不是一種物理運(yùn)行狀態(tài),而是一種程序邏輯流程。它的主要目的不是利用多核提高運(yùn)行效率,而是提供一種更容易理解、不容易出錯(cuò)的語言來描述問題。
實(shí)際上golang默認(rèn)就是運(yùn)行在單OS進(jìn)程上面的,通過指定環(huán)境變量GOMAXPROCS才能轉(zhuǎn)身跑在多OS進(jìn)程上面。有人提到了的pomelo,開源本來是一件很不錯(cuò)的事情,但是基于自己對(duì)callback hell的偏見,我一直持有這種態(tài)度:敢用nodejs寫大規(guī)模游戲服務(wù)器的人,都是真正的勇士 : ) 。
2、Erlang與Golang的coroutine有啥區(qū)別,coroutine是啥?
coroutine本質(zhì)上是語言開發(fā)者自己實(shí)現(xiàn)的、處于user space內(nèi)的線程,無論是erlang、還是golang都是這樣。需要解決沒有時(shí)鐘中斷;碰著阻塞式i\o,整個(gè)進(jìn)程都會(huì)被操作系統(tǒng)主動(dòng)掛起;需要自己擁有調(diào)度控制能力(放在并行環(huán)境下面還是挺麻煩的一件事)等等問題。那為啥要廢老大的勁自己做一套線程放user space里面呢?并發(fā)是服務(wù)器語言必須要解決的問題;system space的進(jìn)程還有線程調(diào)度都太慢了、占用的空間也太大了。把線程放到user space的可以避免了陷入system call進(jìn)行上下文切換以及高速緩沖更新,線程本身以及切換等操作可以做得非常的輕量。這也就是golang這類語言反復(fù)提及的超高并發(fā)能力,分分鐘給你開上幾千個(gè)線程不費(fèi)力。
不同的是,golang的并發(fā)調(diào)度在i/o等易發(fā)阻塞的時(shí)候才會(huì)發(fā)生,一般是內(nèi)封在庫函數(shù)內(nèi);erlang則更夸張,對(duì)每個(gè)coroutine維持一個(gè)計(jì)數(shù)器,常用語句都會(huì)導(dǎo)致這個(gè)計(jì)數(shù)器進(jìn)行reduction,一旦到點(diǎn),立即切換調(diào)度函數(shù)。
中斷介入程度的不同,導(dǎo)致erlang看上去擁有了preemptive scheduling的能力,而golang則是cooperative shceduling的。golang一旦寫出純計(jì)算死循環(huán),進(jìn)程內(nèi)所有會(huì)話必死無疑;要有大計(jì)算量少i\o的函數(shù)還得自己主動(dòng)叫runtime.Sched()來進(jìn)行調(diào)度切換。
3、golang的運(yùn)行效率怎么樣?
我是相當(dāng)反感所謂的ping\pong式benchmark,運(yùn)行效率需要放到具體的工作環(huán)境下面考慮。
首先,它再快也是快不過c的,畢竟底下做了那么多工作,又有調(diào)度,又有g(shù)c什么的。那為什么在那些benchmark里面,golang、nodejs、erlang的響應(yīng)效率看上去那么優(yōu)秀呢,響應(yīng)快,并發(fā)強(qiáng)?并發(fā)能力強(qiáng)的原因上面已經(jīng)提到了,響應(yīng)快是因?yàn)榇罅糠亲枞絠\o操作出現(xiàn)的原因。這一點(diǎn)c也可以做到,并且能力更強(qiáng),但是得多寫不少優(yōu)質(zhì)代碼。
然后,針對(duì)游戲服務(wù)器這種高實(shí)時(shí)性的運(yùn)行環(huán)境,GC所造成的跳幀問題確實(shí)比較麻煩,前面的大神 @達(dá)達(dá) 有比較詳細(xì)的論述和緩解方案,就不累述了 。隨著golang的持續(xù)開發(fā),相信應(yīng)該會(huì)有非常大的改進(jìn)。一是屏蔽內(nèi)存操作是現(xiàn)代語言的大勢(shì)所趨,它肯定是需要被實(shí)現(xiàn)的;二是GC算法已經(jīng)相當(dāng)?shù)某墒?,效率勉勉?qiáng)強(qiáng)過得去;三是可以通過incremental的操作來均攤cpu消耗。
用這一點(diǎn)點(diǎn)效率損失換取一個(gè)更高的生產(chǎn)能力是不是值得呢?我覺得是值得的,硬件已經(jīng)很便宜了,人生苦短,讓自己的生活更輕松一點(diǎn)吧: )。
4、基于以上的論述,我認(rèn)為采用go進(jìn)行小范圍的MMORPG開發(fā)是可行的。
Revel Web開源框架
個(gè)高效的Go語言Web開發(fā)框架,?其思路完全來自 Java 的?Play Framework。
特點(diǎn)
熱編譯,簡(jiǎn)單可選,同步(每個(gè)請(qǐng)求都創(chuàng)建自己的goroutine來處理。
Go語言Web框架:beego
一個(gè)用Go開發(fā)的應(yīng)用框架,思路來自于tornado,路由設(shè)計(jì)來源于sinatra。
支持特性
MVC;
REST;
智能路由;
日志調(diào)試;
配置管理;
模板自動(dòng)渲染;
layout設(shè)計(jì);
中間件插入邏輯;
方便的JSON/XML服務(wù);
mina與netty都是Trustin Lee的作品,所以在很多方面都十分相似,他們線程模型也是基本一致,采用了Reactors in threads模型,即Main Reactor + Sub Reactors的模式。由main reactor處理連接相關(guān)的任務(wù):accept、connect等,當(dāng)連接處理完畢并建立
名稱欄目:go語言哪個(gè)框架好,go語言適合開發(fā)什么
文章網(wǎng)址:http://jinyejixie.com/article26/dssesjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、ChatGPT、外貿(mào)建站、商城網(wǎng)站、云服務(wù)器、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)