golang基礎(1)

golang-gopher.png
go 作為一門相對年輕的語言是在 2009 年由 Ken Thompson 和 Robert Griesemer 共同在 Google 孵化出來的。go 在許多方面都是可以看到 c 和 c++ 的影子。

robert_griesemer.jpg
Ken Thompson 參與了開發 unix,而且
Thompson 也參與 c 語言開發。(下圖)

thompson01.jpg
- 編譯為機器碼
- 垃圾回收
- 協程(goroutine)
- 用於執行緒同步的通道(channels)
- 靜態型別
- 沒有類或型別的繼承
- 通過介面定義關係
go 作為一門高階語言有自己垃圾回收,因此 go 語言不算上是一門可以寫出高效的低階語言。所有 golang 並不適合開發操作作業系統和大型遊戲。
go 語言在處理執行緒同步和併發上下了很多功夫,為此設計出來 goroutine 和 channel。這些特點讓我們可以看出 golang 是一門服務端的語言。除此外 go 語言還適合寫一些指令碼。
go 語言作為一門靜態語言,不想 python 和 ruby 有型別轉換的負擔。在 go 語言中沒有面向物件思想也沒有類的概念。go 語言依據 interface 的結構為 ad-hoc(點對點)關係。通過介面定義一些方法和型別,避免建立複雜和型別的情況發生。
變數宣告
var foo string; foo = "hello" //ok foo = 5 // 編譯錯誤
與 JavaScript 語言差不多,通過 var 關鍵字定義變數。然後 foo 型別定義為 string。作為一門靜態語言,必須為變數宣告型別。
var foo = "hello" // foo = 5 // 編譯錯誤
如果宣告變數時沒有特殊指定型別,go 會根據變數的賦值型別來確定變數 foo 的型別,所以隨後再為 foo 賦值為 5,就會報出型別錯誤。
foo := "hello" // 隱式宣告 foo = 5 // 編譯錯誤