這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
出於朋友的推薦或項目的需要讓我認識了go語言。簡單的學習或瞭解後,發現go可以說吸取了各種語言的精華,並且文法簡練,堪稱至簡至美。尤其在伺服器並發效能上有超強的發揮,是七牛公司開發雲端服務的核心語言。並且效能上比c語言不會遜色多少,但是綜合比較,go的優勢完全大於c。很多人稱是c/c++和python融合,抓住了c的效能,吸取了python的開發簡易度。在此簡單介紹下,go語言Team Dev作者是1987年圖靈獎得主,前貝爾實驗室成員,B語言和C語言的設計者,Unix和plan9的建立者,肯.湯姆遜(Ken Thompson)。其他成員均是plan9在貝爾實驗室的原班人馬,可謂是大牛出品。話不多說,下面開始介紹go:
首先從世界著名的hello world小程式開始(go環境大家自己搞定吧),
package main import "fmt" func main () { fmt.Println("Hello World! 你好,世界!") }
1、package是go的最小分發單位,也是工程管理中依賴關係的體現。
2、import是匯入包關鍵字,由於列印方法屬於fmt包,所以在此匯入之。
3、main方法是go的入口函數,fmt.Println()是列印輸出函數。
有了以上的一段代碼相信會有了一點感性認識。下面著重講下go的語言特性,有其他c/c++,python,java等開發經驗的朋友相信感觸會很深。
1、自動記憶體回收;
2、函數多傳回值;
3、優雅的錯誤處理;
4、匿名函數和閉包;
5、介面(go作者說過一句話,如果讓我移植一種功能到其他語言,我會選擇介面。可以想象它的與眾不同和魅力所在)
6、並發編程;
7、反射;
8、等等,其他特性大家慢慢體會吧。
下面說下go的關鍵字,並簡單舉例示範:
1、break //與c等其他語言的break一樣的作用,終止迴圈並跳出,但又有點不一樣,慢慢體會;
2、case //和switch和select一起使用,沒看錯,select也會也case搭配使用;
3、chan //訊號定義,類似於unix中的管道
4、const //常量定義
5、continue
6、default
7、defer //相信有時忘記關閉一個已經開啟的檔案而讓程式出錯甚至崩潰的時候,那麼defer就可以輕鬆解決這個問題。
8、else
9、fallthrough //由於switch和case不像c裡一樣需要break來跳出,而fallthrough就可以讓兩個挨著的case連續;
10、for //for就是for,不過已經完全超越了c中的for
11、func //定義函數的關鍵字
12、go //用於並行編程,簡單直接;
13、goto //go竟然還保留了goto,不過有時用它還是能解決棘手問題;
14、if
15、impor //匯入其他包關鍵字
16、interface //定義介面
17、map //沒錯,go把map升級為了關鍵字
18、package //定義包名
19、range //迭代用
20、return
21、select //並發用,監聽chan上的資料
22、struct
23、switch //你懂的,不過已經超出了你的理解,它可以傳遞字串,還有更多驚喜;
24、type //定義新的類型用
25、var //聲明變數
基礎類型有
bool型:bool
整型:int8、type、uint8、int16、uint16、int32、uint32、int64、uint64、int、uint、uintptr
浮點型:float32、float64
複數:complex64、complex128
字串:string
字元:rune
錯誤:error
支援的符合類型有
指標(pointer)
數組(array)
切片(slice)
字典(map)
通道(channel)
結構體(struct)
介面(interface)
下面示範幾個小例子:
package mainimport ("fmt")func add(a, b int) int {return a + b}func main() {result := add(1, 2)fmt.Println(result)}
package mainimport ("fmt")func sum(values []int) int {var sum intfor _, value := range values {sum += value}return sum}func main() {values := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}var result intresult = sum(values)fmt.Println(result)}
package mainimport ("fmt")func test() func() int {i := 10return func () int {j := 20i += 100j += 200return i + j}}func main() {f := test()fmt.Println(f(), f(), f(), f(), f())}
go語言學習第一課到此結束。以上是本人初學go語言的一些粗淺認識,如有不對之處,望大牛指正。