對Go語言瞭解前,咱們先來補一些基本概念編程
Program Errors數組
trapped errors。致使程序終止執行,如除0,Java中數組越界訪問安全
untrapped errors。 出錯後繼續執行,但可能出現任意行爲。如C裏的緩衝區溢出、Jump到錯誤地址網絡
Forbidden Behaviours
語言設計時,能夠定義一組forbidden behaviors. 它必須包括全部untrapped errors, 但可能包含trapped errors.併發
Well behaved、ill behavedapp
well behaved: 若是程序執行不可能出現forbidden behaviors, 則爲well behaved。編程語言
ill behaved: 不然爲ill behaved...分佈式
強類型與弱類型函數
強類型(strongly typed): 一種語言的全部程序都是well behaved——即不可能出現forbidden behaviors。性能
弱類型(weakly typed): 不然爲weakly typed。(存在部分程序有可能出現forbidden behaviors)
動態與靜態類型(Dynamically/Statically Typed Language)
靜態類型(statically): 在編譯時拒絕ill behaved程序。
動態類型(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
補充幾個概念來理解
動態類型語言:意思就是類型的檢查是在運行時作的。
靜態類型語言:類型判斷是在運行前判斷。
強類型:一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。
弱類型:一個變量能夠賦不一樣數據類型的值。。
注意:是否是動態類型語言與這門語言是否是類型安全的徹底不相干的,不要將它們聯繫在一塊兒!
前幾節介紹的是學術界的一種相對「嚴格」的說法,在補充的概念中,是比較通俗的解釋。
(我的理解:經過「類型判斷」去拒絕(嘗試)「ill behaved」,經過「指定數據類型」去
保證「well behaved」)。
最後上圖幫助理解
好累啊,來點輕鬆的~
這是一個由計算機領域 「發明之父」 所組成的黃金團隊,他們對系統編程語言,操做系統和並行都有着很是深入的看法.
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 語言的另外一個目標是對於網絡通訊、併發和並行編程的極佳支持,從而更好地利用大 量的分佈式和多核的計算機,這一點對於谷歌內部的使用來講就很是重要了。設計者經過 goroutine 這種輕量級線程的概念來實現這個目標,而後經過 channel 來實現各個 goroutine 之間的通訊。他們實現了**分段棧增加和 goroutine **在線程基礎上多 路複用技術的自動化。