Go語言:簡介(一)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Go語言:簡介(一)

對Go語言瞭解前,我們先來補一些基本概念

基本概念

  • Program Errors

    1. trapped errors。導致程式終止執行,如除0,Java中數組越界訪問

    2. untrapped errors。 出錯後繼續執行,但可能出現任意行為。如C裡的緩衝區溢位、Jump到錯誤地址

  • Forbidden Behaviours
    語言設計時,可以定義一組forbidden behaviors. 它必須包括所有untrapped errors, 但可能包含trapped errors.

  • Well behaved、ill behaved

    1. well behaved: 如果程式執行不可能出現forbidden behaviors, 則為well behaved。

    2. ill behaved: 否則為ill behaved...

  • 強型別與弱類型

    1. 強型別(strongly typed): 一種語言的所有程式都是well behaved——即不可能出現forbidden behaviors。

    2. 弱類型(weakly typed): 否則為weakly typed。(存在部分程式有可能出現forbidden behaviors)

  • 動態與靜態類型(Dynamically/Statically Typed Language)

    1. 靜態類型(statically): 在編譯時間拒絕ill behaved程式。

    2. 動態類型(dynamiclly): 在運行時拒絕ill behaved程式。
      注意:不能通過“變數類型是否明確聲明”來判斷是否是靜態類型語言。

    靜態類型語言套件括:explicitly typed顯式類型 與 implicity typed隱式類型。

    大家覺得C語言要寫int a, int b之類的,Python不用寫(可以直接寫a, b),所以C
    是靜態,Python是動態。這麼理解是不夠準確的。譬如Ocaml是靜態類型的,但是也可
    以不用明確地寫出來。
    這裡說的Ocaml是靜態隱式類型。

  • 動態語言(Dynamic Programming Language)
    又叫動態程式設計語言,是指程式在運行時可以改變其結構:新的函數可以被引進,已有的函
    數可以被刪除等在結構上的變化。比如眾所周知的ECMAScript(JavaScript)便是一個
    動態語言。除此之外如Ruby、Python等也都屬於動態語言,而C、C++等語言則不屬於
    動態語言。

  • 例子
    無類型: 彙編
    弱類型、靜態類型 : C/C++
    弱類型、動態類型檢查: Perl/PHP
    強型別、靜態類型檢查 :Java/C#
    強型別、動態類型檢查 :Python, Scheme
    靜態顯式類型 :Java/C
    靜態隱式類型 :Ocaml, Haskell

  • 補充幾個概念來理解

    1. 動態類型語言:意思就是類型的檢查是在運行時做的。

    2. 靜態類型語言:類型判斷是在運行前判斷。

    3. 強型別:一旦一個變數被指定了某個資料類型,如果不經過強制轉換,那麼它就永遠是這個資料類型了。

    4. 弱類型:一個變數可以賦不同資料類型的值。。
      注意:是不是動態類型語言與這門語言是不是型別安全的完全不相干的,不要將它們聯絡在一起!

    前幾節介紹的是學術界的一種相對“嚴格”的說法,在補充的概念中,是比較通俗的解釋。
    (個人理解:通過“類型判斷”去拒絕(嘗試)“ill behaved”,通過“指定資料類型”去
    保證“well behaved”)。

  • 最後協助理解

好累啊,來點輕鬆的~

GO起源與發展

這是一個由電腦領域 “發明之父” 所組成的黃金團隊,他們對系統程式設計語言,作業系統和並行都有著非常深刻的見解.

Go 語言起源 2007 年,並於 2009 年正式對外發布。
Go 語言在 2010 年 1 月 8 日被 Tiobe(聞名於它的程式設計語言流行程度排名)宣布為 “2009 年年度語言”

  • 為什麼要創造一門程式設計語言?

對比電腦效能的提升,軟體開發領域不被認為發展地足夠快或者比硬體發展更加成功(有許多項目均以失敗告終),同時應用程式的體積始終在不斷地擴大,這就迫切地需要一門具備更高層次概念的低級語言來突破現狀。

在 Go 語言出現之前,開發人員們總是面臨非常艱難的抉擇,究竟是使用執行速度快但是編譯速度並不理想的語言(如:C++),還是使用編譯速度較快但執行效率不佳的語言(如:.NET、Java),或者說開發難度較低但執行速度一般的動態語言呢?顯然,Go 語言在這 3 個條件之間做到了最佳的平衡:快速編譯,高效執行,易於開發。

  • Go語言的發展目標

Go 語言的主要目標是將靜態語言的安全性和高效性與動態語言的易開發性進行有機結合,達到完美平衡.(GO語言是一門型別安全(強型別)和記憶體安全的程式設計語言。)

  • Go語言的特性

1.構建速度

動態語言將快速編譯作為自身的一大亮點,像 C++ 那樣的靜態語言一般都有非常漫長的編譯和連結工作。而同樣作為靜態語言的 Go 語言,通過自身優良的構建機制,成功地去除了這個弊端,使得程式的構建過程變得微不足道,擁有了像指令碼語言和動態語言那樣的高效開發的能力。Go 語言中另一個非常重要的特性就是它的構建速度(編譯和連結到機器代碼的速度),一般情況下構建一個程式的時間只需要數百毫秒到幾秒。C 語言中“標頭檔”的概念卻導致越來越多因為依賴關係而使得構建一個大型的項目需要長達幾個小時的時間,而Go 語言採用包模型這個模型通過嚴格的依賴關係檢查機制來加快程式構建的速度,提供了非常好的可量測性。

2.記憶體回收

由於記憶體問題(通常稱為記憶體流失)長期以來一直伴隨著 C++ 的開發人員們,Go 語言的設計者們認為記憶體管理不應該是開發人員所需要考慮的問題。因此儘管 Go 語言像其它靜態語言一樣執行本地代碼,但它依舊運行在某種意義上的虛擬機器,以此來實現高效快速的記憶體回收.

3.協程與通道

Go 語言的另一個目標是對於網路通訊、並發和並行編程的極佳支援,從而更好地利用大量的分布式和多核的電腦,這一點對於Google內部的使用來說就非常重要了。設計者通過 goroutine 這種輕量級線程的概念來實現這個目標,然後通過 channel 來實現各個 goroutine 之間的通訊。他們實現了**分段棧增長和 goroutine **線上程基礎上多工技術的自動化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.