Golang橫空出世的背景(為什麼選擇Go)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 起源及演化
最近十年來,C/C++在計算領域沒有很好得到發展,並沒有新的系統程式設計語言出現。對開發程度和系統效率在很多情況下不能兼得。要麼執行效率高,但低效的開發和編譯,如C++;要麼執行低效,但擁有有效編譯,如.NET、Java;所以需要一種擁有較高效的執行速度、編譯速度和開發速度的程式設計語言,Go就橫空出世了。
go是一個Google公司推出的一個開源項目(系統開發語言),它是基於編譯、垃圾收集和並發的程式設計語言。並將其開源並在BSD許可證下發行。
Go最初的設計由Robert Griesemer,Rob Pike 和Ken Thompson在2007年9月開始的,官方的發布是在2009年11月。2010年5月由Rob Pike公開的將其運用於google內部的一個後台系統。目前在google App Engine也支援go語言(目前僅支援三種:Java、Python和Go)
Go可以運行在Linux, Mac OS X, FreeBSD, OpenBSD, Plan 9 和 Microsof windows系統上,同時也支援多種處理器架構:I386, AMD64和ARM
(註:官方網站: http://golang.org
Robert Griesemer:曾協助製作Java的HotSpot編譯器和Chrome瀏覽器的JavaScript引擎V8Rob Pike:曾是貝爾實驗室的Unix團隊和Plan9作業系統計劃成員,與Thompson工同創造了UTF-8字元編碼Ken Thompson:是C語言和Unix的創造者。(1983年圖靈獎和1988國家技術獎)他們對系統程式設計語言、作業系統和並發有很深的理解。

主要特點
  • Go被設計為21世紀的C語言,它屬於C語言家族,比如:C/C++、Java和C#,同時它吸收了很多現在程式設計語言的優點。
    • 對Go的並發機制是源於CSP(Communication Sequential Processes),這同樣的機制也被於Erlang。
    • 對C、C++相比,其文法得到了很大程式上的簡化,使代碼更簡明、清楚,同時擁有動態語言的一些特點
  • 基於BSD完全開源,所以能免費的被任何人用於適合商業目的。
  • 語言層面對並發的支援(goroutine:獨立於OS的線程,所以多個goroutine可以運行在一個OS的線程裡,也可以分布到多個OS線程裡。goroutine是從OS線程上抽象出來的一個輕量級的基於CSP的協程)
    • 在語言層面加入對並發的支援,而不是以庫的形式提供
    • 更高層次的並發抽象,而不是直接暴露OS的並發機制.
    • 多個goroutine間是並行的。
    • 底層混合使用非阻塞IO和線程
  • 主要目的
    • 融合效率、速度和安全的強型別的靜態編譯語言,同時能夠容易的進行編程,讓編程變得更有樂趣。
    • 較少的關鍵字和簡潔的文法
    • 型別安全和記憶體安全:在指標類型,但不允許對指標進行操作。
    • 支援網路通訊、並發控制、並行計算和分散式運算。
    • 在語言層面實現對多處理器(或多核)進行編程
  • 內嵌運行時反射機制。
  • 可以整合C語言實現的庫
  • 它不是傳統意義上的物件導向語言(沒有類的概念),但它有介面(interface),由此實現多態特性。
  • 函數(Function)是它的基本構成單元(也可以叫著面向函數的程式設計語言)
  • 是一種靜態類型和安全的語言,將其編譯、串連成本地代碼(擁有高效的執行效率)
  • 支援交叉編譯,並採用編譯的編碼:UTF-8
應用領域
    它最初的構想是作為一個系統程式設計語言,但目前也被用於像Web Server,儲存架構等這類分布式、高並發系統中。當然也可以用於一般的文文書處理和作為指令碼程式。

    Go的編譯器作為Native Client被內嵌到Chrome瀏覽器中,可以被Web應用程式用來執行本地代碼;同時Go也可以運行在Intel和ARM的處理器上。
    目前已被Google整合到Google APP Engine中,在基於Google App Engine基礎設施的Web應用中也得到了很好的應用。目前GAE中僅支援三種應用程式開發語言:Java、Python和Go。(註:GAE的連結)

    但不適合應用到對即時性要求很高的系統中,因為Go的記憶體模型是基於記憶體回收機制和原子記憶體配置。


目前缺少的一些特性
    目前Go對OO中涉及到的一些特點還沒有很好的支援,但可能會在以後進一步完善。
  • 沒有函數和操作符的重載
  • 不支援隱式類型轉換, 避免產生Bug和迷惑。
  • 不支援類和繼承。
  • 不支援動態代碼載入
  • 不支援動態庫
  • 不支援泛型
總結
    Go語言的主要特點
  • 強調簡單、易學
  • 記憶體管理和文法簡單
  • 快速編譯
  • 並發支援
  • 靜態類型
  • 部署簡單(go install)
  • 自身就是文檔(通過godoc將代碼中的注釋資訊構造成文檔)
  • 開源免費(BSD licensed)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.