golang值得購買嗎,golang有什麼優勢

本文目錄一覽:

使用Go 語言開發大型 MMORPG 遊戲伺服器怎麼樣

1.為什麼golang的開發效率高?

golang是一編譯型的強類型語言,它在開發上的高效率主要來自於後發優勢,不用考慮舊有噁心的歷史,又有一個較高的工程視角。良好的避免了程序員因為「 { 需不需要獨佔一行 」這種革命問題打架,也解決了一部分趁編譯時間找產品妹妹搭訕的階級敵人。

它有自己的包管理機制,工具鏈成熟,從開發、調試到發布都很簡單方便;

有反向介面、defer、coroutine等大量的syntactic sugar;

編譯速度快,因為是強類型語言又有gc,只要通過編譯,非業務毛病就很少了;

它在語法級別上支持了goroutine,這是大家說到最多的內容,這裡重點提一下。首先,coroutine並不稀罕,語言並不能超越硬體、操作系統實現神乎其神的功能。golang可以做到事情,其他語言也可以做到,譬如c++,在boost庫裡面自己就有的coroutine實現(當然用起來跟其他boost庫一樣噁心)。golang做的事情,是把這一套東西的使用過程簡化了,並且提供了一套channel的通信模式,使得程序員可以忽略諸如死鎖等問題。

goroutine的目的是描述並發編程模型。並發與並行不同,它並不需要多核的硬體支持,它不是一種物理運行狀態,而是一種程序邏輯流程。它的主要目的不是利用多核提高運行效率,而是提供一種更容易理解、不容易出錯的語言來描述問題。

實際上golang默認就是運行在單OS進程上面的,通過指定環境變數GOMAXPROCS才能轉身跑在多OS進程上面。有人提到了網易的pomelo,開源本來是一件很不錯的事情,但是基於自己對callback hell的偏見,我一直持有這種態度:敢用nodejs寫大規模遊戲伺服器的人,都是真正的勇士 : ) 。

2、Erlang與Golang的coroutine有啥區別,coroutine是啥?

coroutine本質上是語言開發者自己實現的、處於user space內的線程,無論是erlang、還是golang都是這樣。需要解決沒有時鐘中斷;碰著阻塞式i\o,整個進程都會被操作系統主動掛起;需要自己擁有調度控制能力(放在並行環境下面還是挺麻煩的一件事)等等問題。那為啥要廢老大的勁自己做一套線程放user space裡面呢?

並發是伺服器語言必須要解決的問題;

system space的進程還有線程調度都太慢了、佔用的空間也太大了。

把線程放到user space的可以避免了陷入system call進行上下文切換以及高速緩衝更新,線程本身以及切換等操作可以做得非常的輕量。這也就是golang這類語言反覆提及的超高並發能力,分分鐘給你開上幾千個線程不費力。

不同的是,golang的並發調度在i/o等易發阻塞的時候才會發生,一般是內封在庫函數內;erlang則更誇張,對每個coroutine維持一個計數器,常用語句都會導致這個計數器進行reduction,一旦到點,立即切換調度函數。

中斷介入程度的不同,導致erlang看上去擁有了preemptive scheduling的能力,而golang則是cooperative shceduling的。golang一旦寫出純計算死循環,進程內所有會話必死無疑;要有大計算量少i\o的函數還得自己主動叫runtime.Sched()來進行調度切換。

3、golang的運行效率怎麼樣?

我是相當反感所謂的ping\pong式benchmark,運行效率需要放到具體的工作環境下面考慮。

首先,它再快也是快不過c的,畢竟底下做了那麼多工作,又有調度,又有gc什麼的。那為什麼在那些benchmark裡面,golang、nodejs、erlang的響應效率看上去那麼優秀呢,響應快,並發強?並發能力強的原因上面已經提到了,響應快是因為大量非阻塞式i\o操作出現的原因。這一點c也可以做到,並且能力更強,但是得多寫不少優質代碼。

然後,針對遊戲伺服器這種高實時性的運行環境,GC所造成的跳幀問題確實比較麻煩,前面的大神 @達達 有比較詳細的論述和緩解方案,就不累述了 。隨著golang的持續開發,相信應該會有非常大的改進。一是屏蔽內存操作是現代語言的大勢所趨,它肯定是需要被實現的;二是GC演算法已經相當的成熟,效率勉勉強強過得去;三是可以通過incremental的操作來均攤cpu消耗。

用這一點點效率損失換取一個更高的生產能力是不是值得呢?我覺得是值得的,硬體已經很便宜了,人生苦短,讓自己的生活更輕鬆一點吧: )。

4、基於以上的論述,我認為採用go進行小範圍的MMORPG開發是可行的。

golang適合做web開發嗎

適合。

框架足夠成熟了 A Survey of 5 Go Web Frameworks

小型項目你甚至不用框架,用net/http http – The Go Programming Language

常用庫也成熟了 Top – Go Search

golang的web後端即使不concurrent也比php,ruby,python快很多很多

golang里用concurrent真的非常方便,非常非常快,超大web項目golang scale成本低

如果你想,golang的部署可以比php更方便,使用go get和http.ServeAndListen()可以不用nginx和

apache

對於文件改動重新編譯其實並不是大問題,看pilu/fresh ∙ GitHub,其實你自己寫shell腳本(也可以

直接用go寫,因為它本身就是系統語言)監控文件系統改動然後自動重新build,即使是C/C++的項

目這也不是大問題,人們不用C/C++寫web是因為它們不是寫web app的最佳選擇

golang寫的代碼編譯通過後,要比scripting language魯棒,因為go compiler強制一些最佳實踐

所以如果你熟悉go或者願意投資時間,這是一種很值得用的語言,如果你不熟悉而且項目周期很緊,還是

建議你用自己最熟悉的語言,學go本身需要花時間的。

我最近一個web項目是用Gorilla寫的,也是邊學邊做 Gorilla, the golang web toolkit;這個Go by

Example 挺有用

萌新小前端web想入手後台語言,java,php,golang這三種該選哪個

Java應該應用最廣,也就是江湖中說的「穩如狗」。語言乾淨而啰嗦了點吧。生態豐富功能齊全所以學習時間花費不菲。

PHP是專註於Web應用開發的語言,已經很規範了,應用也很廣。好的PHP程序員不多,野球型PHP程序員太多。

Java和PHP的市場需求量都很大。掌握一個都不愁沒機會。Go也不錯,但市場份額還有待時日。

為什麼我全力推薦Golang

討論哪個語言更好,就像在爭論姚明和劉翔誰是更優秀的運動員。因為各自的坐標象限不同,常常會陷入一個難有結論怪圈。

所以本文絕不是在說Golang是比其他語言更好的語言。Golang只是最值得推薦的語言,尤其適合快速成長中的後端研發團隊。

我推薦Golang的主要理由,並不是技術性的要素:不是他的高並發能力,編譯的速度,跨平台能力,內存效率,也不是社區的活躍度等等。

事實上,創業之後,或者說成為一個技術管理者之後,技術優點就已經不再是我推薦任何一種語言的關鍵因素了。

因為,對於一個研發團隊來說,項目成敗的關鍵因素是:成本、質量和時間!

1、人力資源的成本

人力資源是研發團隊最重要的資源,也是唯一的資源。其成本不僅僅是團隊要支付的薪資代價。也包括獲得資源的難易程度,例如招聘和培訓的速度。以及維持資源,也就是保持員工滿意度或者說士氣的代價,也就是管理成本。(上述成本不僅指錢,時間也是非常昂貴的成本)

Golang有一系列特點,使它既容易上手,又易於維護。Golang可以讓初階和中階工程師,經過少許培訓,就寫出相當不錯的代碼。直接點說,一票1-2年經驗少許靈性的年輕工程師轉Golang,只要少許指導,很快就可以寫出高並發高負載能力生產級別的代碼,而且質量相當有保證。而同樣的工程,如果用C++或java等語言,則需要至少3-5年經驗的工程師來完成,同時質量還是要讓人擔心。

那麼,對於團隊特別是成長型的或創業團隊來說,現在有Golang這樣一種語言,可以讓大量初階和中級工程師承擔主要開發工作,還能保證相當優秀的結果,從資金成本和時間成本控制的角度,簡直就是美夢成真。

2、項目研發的效率

說到高並發高負載,讓我不能不想起nginx。nginx在2004年從web server領域橫空出世,所向披靡。精巧嚴謹易於維護和擴展的代碼結構,也是教科書級別的。

但是要知道,一個用C寫出一個nginx,是需要世界上最優秀的工程師的。這樣的工程師,不僅團隊裡面沒有,連遇到一個都很難。

可現在,我再告訴你,一個使用Golang的中級工程師,就已經可以寫出性能與nginx相近的高並發高負載應用。而且不僅性能相近,而且需要的代碼行數和開發時間也短很多。這對於團隊成員來說,這很可能是決定生死存亡還是走上人生巔峰的區別。

總之:

對於團隊管理者來說,Golang可以讓團隊用更低的人力成本,更快的速度,更高的質量,完成項目研發。

對於工程師來說,Golang可以讓人有更多的時間去思考和生活。

所以,我推薦Golang。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/298053.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:17
下一篇 2024-12-28 12:17

相關推薦

  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 程序化建模的優勢和劣勢

    程序化建模是指通過計算機編製程序實現對各種複雜系統的建模和模擬過程。隨著計算機技術和計算能力的不斷提高,程序化建模在眾多領域得到了廣泛應用,例如計算機輔助設計、製造、模擬、數據分析…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • 開源Python CMS的優勢和應用範圍

    開源Python CMS是一種基於Python架構的內容管理系統。它不僅具有高效可靠的核心框架,還有大量的插件和現成的模板,可以充分滿足各種網站需求,使開發人員輕鬆地進行網站設計和…

    編程 2025-04-28
  • HTML5 和 HTML4 區別和優勢

    一、HTML5 與 HTML4 的簡介 HTML4 於 1997 年發布,成為了互聯網頁面設計的工業標準。而 HTML5 於 2014 年正式發布,具有更多強大的功能和改進,在互聯…

    編程 2025-04-24
  • Golang中使用strings.Split函數進行字元串分割的方法

    一、Split函數的基本用法 字元串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字元串也是一個基本的數據類型,而strings包提供了一些操作字元串的…

    編程 2025-04-23
  • 深入下探golang http server

    Go語言已經成為了軟體開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Golang環境變數全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變數來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23

發表回復

登錄後才能評論