golang開源項目,go 開源項目

本文目錄一覽:

寫小程序,什麼語言跨平台兼容和性能較好?golang

我最早使用的語言是Java和Python, 並且一直都對Python充滿好感, 我喜歡這種很樸實和高效率的感覺, 但我卻最後沒有採用Python,原因其實也很簡單, 我就是不喜歡縮進語法, 就跟很多人換工作僅僅是為了屏幕更大一點一樣, 另外就是有了同樣很棒的可選方案, 這就是Ruby, 所以我最終採用了Ruby作為主力編程語言, 同樣也為不能使用Python而有一點小遺憾,畢竟Python的健壯性比Ruby好很多,只不過Ruby也一直在進步, 所以這一點無傷大雅

我們都知道,無論是Python還是Ruby,甚至Java, 都是在解決業務層的問題, 屬於應用型語言, 以解決業務邏輯為主, 但還有一個領域是系統領域,偏網絡層和底層操作,在這一塊我一直在尋找一種優雅的方案, C++被我首先給淘汰掉了, C的開發效率太低, Java倒是比較合適, 就是太臃腫,而且缺少系統編程的基因,畢竟它是企業級開發出身的

最後我選擇了Erlang, 因為它在網絡層方面表現優秀, 同時容錯性和健壯性都很不錯, 它的虛擬機是唯一可以跟JVM媲美的, 而且還有OTP的超重量級武器, 幾乎可以是通殺網絡層應用, 但根據我的總結它有一個硬傷和一個軟肋,這一點後面展開,可以說選擇Erlang是我目前所知道的方案裏面是最優的

直到有一天我了解了Golang, 我知道Golang其實也蠻早的, 大概08年的時候就知道Google在搞一門奇怪的語言, 之後的幾年,一直有不少以老莫為代表的人在嘀咕Golang, 其實我一直沒太關注,我從ROR中吸取的經驗是,成熟度對於商用很重要, 後來基於Golang開發的產品越來越多,讓我不得不去研究一下, 這我才知道, 這就是我夢想中的Python, 效率和性能達到了最佳的平衡,對Go了解越多, 就越不願意用Erlang寫代碼,主要原因:

1、Erlang的硬傷在於代碼的可讀性、表現力, 讓我來舉個小例子, 比如你為你的系統軟件構建一個RESTFUL的接口,我們大致了解一下代碼風格,先不說Erlang, 無論是你c/c++/python/ruby/java 出身, 對Go是不是有種很久違的感覺, 為什麼說是硬傷? 因為對一門語言來說,語法是不大可能會大幅度變更的, 而且不會出現大的變化, 我不知道有沒有人讀過《松本行弘的編程世界》,裏面闡述的道理很明白, 真正好的編程方式是人去主宰計算機而不是計算機主宰人, 我感覺Erlang就有點主宰我的編程思維的感覺(我的視力本身就不好,它還在不斷的扼殺我的眼睛!), 編程首先是門邏輯學,其次是工程學,最後才是數學, 又讓我想起吳軍的《數學之美》所說的, 人工智能上個世紀一直在走彎路, 期望機器的高度圖靈完備, 而忽視人類本身已有的文明,統計歸納的應用

2、Erlang的軟肋在於高質量的庫少,儘管有不少殺手級應用, 同樣Go在這方面也是軟肋, 這一點對於一個不到五年的語言有情可原, 但對於一個20多年的語言是不是有點說不過去, 比如你用json解析庫,很多人都是從mochiweb這個基本不更新的庫中去抽取, 而我認為對於類似json這種東西可以考慮融入到語言標準庫中, 因為未來的商業軟件的api化趨勢越來越明顯,說的難聽點 , 一個倚老賣老一個與時俱進,反正我對Golang的庫一點也不擔心, 目前的成績易經非常棒了, 遠遠優於Ruby/Python的前五年, 可參見已有的高質量的庫列表

3、Erlang不合群, 這主要體現在跟其他語言的交互性上, 當然這也有深層次的原因, Erlang本身有自己的哲學, 如出錯恢復機制, 你融入一個其他語言的東西進去, 這帳就不好算,就好比你硬要讓一個喝咖啡的跟一個吃大蒜的坐在一起, 總之你寫一個Erlang的port遠遠比Go複雜, 甚至比Python/Java還要複雜, 這就造成了Erlang在底層編程上效果不是很好, 沒法利用linux已有的很多優秀成果,我一直認為Erlang的什麼的mysql/pg/oracle驅動都沒有必要存在, Erlang一定是一個self-container應用, 你只要用到了其他東西, 根據木桶理論, 你就不敢號稱9個9,以系統的眼光看問題, 我覺得一個系統的魯棒性不能依賴於某一組件, 這也是為什麼愛立信本身的Erlang應用並不廣泛

4、說說數據類型吧, 我不止聽到1個人說Erlang對字符串的處理不有好, 它把string當做list來處理,其實本質上是該這麼,但,還是那句話, 違背了面向人的哲學, 應該做一些DSL, 比如Golang裏面的 := 就是一個糖衣, 等價於 var xx yyy = zzzz, 大大方便的程序員少敲不少字符, Golang裏面對字符轉可以說基本和python差不多, slice map函數很強大, 支持lambda條件,雖然Erlang的基本類型很少, 但有很多構造, 所謂構造等價於Golang裏面複雜的struct, 也奇怪了,我就是感覺Erlang構造傷眼睛好嗎?可能是各種括號的比對的原因吧, 而且我認為這是不必要的, 顯然Erlang缺少DSL的基因, 當然跟Erlang出身的年代有關, 我不誇張的說, 自打用Erlang以後我的視力又下降了100度左右, 我不是很喜歡lisp所說的符號也是一種語法, 可能這又跟函數式編程有關吧:形式推導遠大於邏輯演繹

5、其實我最不關注的是性能問題, 因為隨着摩爾定律, 單位計算單元的性價比會無限高,但Golang既然提出它的性能逼近C, 那我還是提一下吧, 當然, Erlang也還可以, 雖然比Java慢, 但跟Python一個檔次吧

6、再談談報錯機制, 因為Erlang的的報錯信息太讓人糾結了, 起初以為我不會看出錯信息, 後來也使用了Sasl, 還是不夠直觀,甚至有時要用工具分析crash文件來定位問題,還是跟Erlang的哲學有關, 在Erlang中一切都是並行的, 所以它根本不care是物理哪一行出錯, 只跟Actor綁定, 然後告訴你Actor的ID和出錯代號, 你自己憑經驗去分析吧,這樣做的好處是可以很方便定位出並行中出現的問題,但凡事都是相對的, 在這一點上有點糾枉過正,根據我的經驗, 絕大部分時候我只希望先給我明確的指出哪一行出錯了好嗎? 甚至把順序的backtrace用完整的英文句子打印出來好嗎?至於並行中的錯誤及時在命令式多線程語言中是不常見的,雖然並不是沒有, 但遇到錯誤我再費勁去調試好了, 但並不是所有的邏輯都用並行的思維去定位問題, 我甚至認為, 對於一個系統不完全是並行也不完全是串行,跟好比我們衡量世界不能單純的唯物也不能完全的唯心一樣, 這一點Golang就做了很好的折中, 不需要並行的時候你老老實實的寫串行代碼, 需要並行的時候也有較複雜的機制來應對, 合乎情理

7、再說說招人吧, 以前招過好幾個C出來的人,說實話水平很好, 可以一周就完成一個小組件, libevent用的熟的很,後來我逼人家用Erlang,結果把人家逼走了,至今我還很後悔, 自己的一廂情願強加在別人身上真是太不合適了,但我招純Erlang出來的人,可以說比招objc的人還難, 沒有人,空談技術的優雅性首先就是不靠譜的,再看看郵件列表, Golang的活躍度明顯比Erlang高很多, 基本逼近Ruby,更重要的是, 我根本不擔心Golang的人才,因為只要熟悉Python/C/Ruby/或者C++, 基本可以實現半天入門, 之後就可以噼里啪啦邊搜資料邊幹活了,雖然有足夠的深度,但門檻極其平緩,工程人員也可以復用很多已有的知識。 Erlang在這一點其實跟第一點硬傷有關,大部分人學一周都摸不着頭腦,不是每個人的抽象思維和世界觀都是一樣的好嗎, 所以函數式編程儘管不比命令式語言起步晚,但始終學的人很少,這就是歷史, 對於大部分人, 更希望解決問題,創造價值, 而不是數學來推導去

8、最後我建議, 如果你是玩c/c++的, 現在開始學Golang,是最好的時機, 跟一門靠譜的語言一起成長, 這種感覺非常棒, 你用Erlang折騰1個應用, 用Go恐怕都完成了10個開源項目, 當然,也要結合自己的口味, Golang就是Sublime Text, Erlang就是Emacs

相信自己的判斷,相信自己的邏輯, 贏就是贏,輸就是輸

轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

go語言可以做什麼

1、服務器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、數據打包、虛擬機處理、文件系統等。

2、分佈式系統、數據庫代理器、中間件:例如Etcd。

3、網絡編程:這一塊目前應用最廣,包括Web應用、API應用、下載應用,而且Go內置的net/http包基本上把我們平常用到的網絡功能都實現了。

4、開發雲平台:目前國外很多雲平台在採用Go開發,我們所熟知的七牛雲、華為雲等等都有使用Go進行開發並且開源的成型的產品。

5、區塊鏈:目前有一種說法,技術從業人員把Go語言稱作為區塊鏈行業的開發語言。如果大家學習區塊鏈技術的話,就會發現現在有很多很多的區塊鏈的系統和應用都是採用Go進行開發的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯盟鏈,兩者都有go語言的版本,且go-ehtereum還是以太坊官方推薦的版本。

自1.0版發佈以來,go語言引起了眾多開發者的關注,並得到了廣泛的應用。go語言簡單、高效、並發的特點吸引了許多傳統的語言開發人員,其數量也在不斷增加。

使用 Go 語言開發的開源項目非常多。早期的 Go 語言開源項目只是通過 Go 語言與傳統項目進行C語言庫綁定實現,例如 Qt、Sqlite 等。

後期的很多項目都使用 Go 語言進行重新原生實現,這個過程相對於其他語言要簡單一些,這也促成了大量使用 Go 語言原生開發項目的出現。

怎麼學習golang

已經有好多程序員都把Go語言描述為是一種所見即所得(WYSIWYG)的編程語言。這是說,代碼要做的事和它在字面上表達的意思是完全一致的。 在這些新語言中,包含D,Go,Rust和Vala語言,Go曾一度出現在TIOBE的排行榜上面。與其他新語言相比,Go的魅力明顯要大很多。Go的成熟特徵會得到許多開發者的欣賞,而不僅僅是因為其誇大其詞的曝光度。下面我們來一起探討一下谷歌開發的Go語言以及談談Go為什麼會吸引眾多開發者: 快速簡單的編譯 Go編譯速度很快,如此快速的編譯使它很容易作為腳本語言使用。關於編譯速度快主要有以下幾個原因:首先,Go不使用頭文件;其次如果一個模塊是依賴A的,這反過來又取決於B,在A裏面的需求改變只需重新編譯原始模塊和與A相依賴的地方;最後,對象模塊裏面包含了足夠的依賴關係信息,所以編譯器不需要重新創建文件。你只需要簡單地編譯主模塊,項目中需要的其他部分就會自動編譯,很酷,是不是? 通過返回數值列表來處理錯誤信息 目前,在本地語言裏面處理錯誤的方式主要有兩種:直接返回代碼或者拋異常。這兩種都不是最理想的處理方式。其中返回代碼是非常令人沮喪的,因為返回的錯誤代碼經常與從函數中返回的數據相衝突。Go允許函數返回多個值來解決這個問題。這個從函數裏面返回的值,可以用來檢查定義的類型是否正確並且可以隨時隨地對函數的返回值進行檢查。如果你對錯誤值不關心,你可以不必檢查。在這兩種情況下,常規的返回值都是可用的。 簡化的成分(優先於繼承) 通過使用接口,類型是有資格成為對象中一員的,就像Java指定行為一樣。例如在標準庫裏面的IO包,定義一個Writer來指定一個方法,一個Writer函數,其中輸入參數是位元組數組並且返回整數類型值或者錯誤類型。任何類型實現一個帶有相同簽名的Writer方法是對IO的完全實現,Writer接口。這種是解耦代碼而不是優雅。它還簡化了模擬對象來進行單元測試。例如你想在數據庫對象中測試一個方法,在標準語言中,你通常需要創建一個數據庫對象,並且需要進行大量的初始化和協議來模擬對象。在Go裏面,如果該方法需要實現一個接口,你可以創建任何對該接口有用的對象,所以,你創建了MockDatabase,這是很小的對象,只實現了幾個需要運行和模擬的接口——沒有構造函數,沒有附件功能,只是一些方法。 簡化的並發性 相對於其他語言,並發性在Go裏面顯得更加容易。把『go』關鍵字放在任意函數前面然後那個函數就會在其go-routine自動運行(一個很輕的線程)。go-routines是通過通道進行交流並且基本上封鎖了所有的隊列消息。普通工具對相互排斥是有用,但是Go通過使用通道來踢掉並發性任務和坐標更加容易。 優秀的錯誤消息 所有與Go相似的語言,自身作出的診斷都是無法與Go相媲美的。例如,一個死鎖程序,在Go運行時會通知你目前哪個線程導致了這種死鎖。編譯的錯誤信息是非常詳細全面和有用的。 其他 這裡還有許多其他吸引人的地方,下面就一概而過的介紹一下,比如高階函數、垃圾回收、哈希映射和可擴展的數組內置語言(部分語言語法,而不是作為一個庫)等等。 當然,Go並不是完美無瑕。在工具方面還有些不成熟的地方和用戶社區較小等,但是隨着谷歌語言的不斷發展,肯定會有整治措施出來。儘管許多語言,尤其是D、Rust和Vala旨在簡化C++並且對其進行簡化,但它們給人的感覺仍是「C++看上去要更好」。

【Go語言的優勢】

可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。

靜態類型語言,但是有動態語言的感覺,靜態類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率很高。

語言層面支持並發,這個就是Go最大的特色,天生的支持並發,我曾經說過一句話,天生的基因和整容是有區別的,大家一樣美麗,但是你喜歡整容的還是天生基因的美麗呢?Go就是基因裏面支持的並發,可以充分的利用多核,很容易的使用並發。

內置runtime,支持垃圾回收,這屬於動態語言的特性之一吧,雖然目前來說GC不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之後的GC。

簡單易學,Go語言的作者都有C的基因,那麼Go自然而然就有了C的基因,那麼Go關鍵字是25個,但是表達能力很強大,幾乎支持大多數你在其他語言見過的特性:繼承、重載、對象等。

豐富的標準庫,Go目前已經內置了大量的庫,特別是網絡庫非常強大,我最愛的也是這部分。

內置強大的工具,Go語言裏面內置了很多工具鏈,最好的應該是gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難。

跨編譯,如果你寫的Go代碼不包含cgo,那麼就可以做到window系統編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統的信息。

內嵌C支持,前面說了作者是C的作者,所以Go裏面也可以直接包含c代碼,利用現有的豐富的C庫。

有哪些不錯的golang開源項目

根據官方1.4版本的發佈時候(2014.12)判斷(官方說大概六個月後出新版本)預計五月底六月初。因為這次的版本改進幅度有點大,不排除延遲發佈的可能。

原創文章,作者:IHCG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131402.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IHCG的頭像IHCG
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • 使用Golang調用Python

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

    編程 2025-04-29
  • go-chassis

    本文將深入探究go-chassis,包括它的基本概念,特性,以及如何使用它構建微服務應用程序。 一、微服務架構及其優勢 微服務架構是一種將應用程序拆分為小型、自治服務的體系結構。每…

    編程 2025-04-29
  • SDN開源組織中ONOS起步最早

    ONOS是一個開源軟件定義網絡(SDN)操作系統,由ON.Lab創建並一直在開發。該平台旨在通過使用網絡虛擬化技術使工程師能夠快速靈活地創建和管理網絡服務。 一、ONOS的優勢 在…

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

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

    編程 2025-04-29
  • 如何將Java項目分成Modules並使用Git進行版本控制

    本文將向您展示如何將Java項目分成模塊,並使用Git對它們進行版本控制。分割Java項目可以使其更容易維護和拓展。Git版本控制還可以讓您跟蹤項目的發展並協作開發。 一、為什麼要…

    編程 2025-04-28
  • GitHub好玩的開源項目

    本文旨在介紹GitHub上一些好玩的開源項目,並提供代碼示例供讀者參考和學習。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各種平台和設備,方便用戶在Git…

    編程 2025-04-28
  • 使用Go-Redis獲取Redis集群內存使用率

    本文旨在介紹如何使用Go-Redis獲取Redis集群的內存使用率。 一、Go-Redis簡介 Go-Redis是一個用於連接Redis服務器的Golang客戶端。它支持Redis…

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28

發表回復

登錄後才能評論