1.保留但大幅度簡化指標
Go語言保留著C中值和指標的區別,但是對於指標繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內寸而引起各式各樣的錯誤。
2.多引數返回
還記得在C裡面為了回饋多個引數,不得不開闢幾段指標傳到目標函式中讓其操作麼?在Go裡面這是完全不必要的。而且多引數的支援讓Go無需使用繁瑣的exceptions體系,一個函式可以返回期待的返回值加上error,呼叫函式後立刻處理錯誤資訊,清晰明瞭。
3.Array,slice,map等內建基本資料結構
如果你習慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那麼熟悉,而且更加高效。如果你是C++程式設計師,你會發現你又找到了STL的vector和map這對朋友。
4.Interface
Go語言最讓人讚歎不易的特性,就是interface的設計。任何資料結構,只要實現了interface所定義的函式,自動就implement了這個interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設計度和OO抽象度,讓你的程式碼也非常乾淨。千萬不要以為你習慣了Java那種一條一條加implements的方式,感覺還行,等介面的設計越來越複雜的時候,無數Bug正在後面等著你。
同時,正因為如此,Go語言的interface可以用來表示任何generic的東西,比如一個空的interface,可以是string可以是int,可以是任何資料型別,因為這些資料型別都不需要實現任何函式,自然就滿足空interface的定義了。加上Go語言的typeassertion,可以提供一般動態語言才有的ducktyping特性,而仍然能在compile中捕捉明顯的錯誤。
5.OO
Go語言本質上不是面嚮物件語言,它還是過程化的。但是,在Go語言中,你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這裡,不需要class,仍然可以繼承,仍然可以多型,但是速度卻快得多。因為本質上,OO在Go語言中,就是普通的struct操作。
6.Goroutine
這個幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不瞭解Goroutine,那麼你只需要知道,這玩意是超級輕量級的類似執行緒的東西,但透過它,你不需要複雜的執行緒操作鎖操作,不需要care排程,就能玩轉基本的並行程式。在Go語言裡,觸發一個routine和erlangspawn一樣簡單。基本上要掌握Go語言,以Goroutine和channel為核心的記憶體模型是必須要懂的。不過請放心,真的非常簡單。
7.更多現代的特性
和C比較,Go語言完全就是一門現代化語言,原生支援的Unicode,garbagecollection,Closures(是的,和functionalprogramminglanguage類似),function是firstclassobject,等等等等。
看到這裡,你可能會發現,我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點。我想說的是,一點都不誇張,連Go語言的入門學習到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時代,對於Go語言,從入門到能夠上手做專案,最多不過半個月。Go語言給人的感覺就是太直接了,什麼都直接,讀原始碼直接,寫自己的程式碼也直接。
1.保留但大幅度簡化指標
Go語言保留著C中值和指標的區別,但是對於指標繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內寸而引起各式各樣的錯誤。
2.多引數返回
還記得在C裡面為了回饋多個引數,不得不開闢幾段指標傳到目標函式中讓其操作麼?在Go裡面這是完全不必要的。而且多引數的支援讓Go無需使用繁瑣的exceptions體系,一個函式可以返回期待的返回值加上error,呼叫函式後立刻處理錯誤資訊,清晰明瞭。
3.Array,slice,map等內建基本資料結構
如果你習慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那麼熟悉,而且更加高效。如果你是C++程式設計師,你會發現你又找到了STL的vector和map這對朋友。
4.Interface
Go語言最讓人讚歎不易的特性,就是interface的設計。任何資料結構,只要實現了interface所定義的函式,自動就implement了這個interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設計度和OO抽象度,讓你的程式碼也非常乾淨。千萬不要以為你習慣了Java那種一條一條加implements的方式,感覺還行,等介面的設計越來越複雜的時候,無數Bug正在後面等著你。
同時,正因為如此,Go語言的interface可以用來表示任何generic的東西,比如一個空的interface,可以是string可以是int,可以是任何資料型別,因為這些資料型別都不需要實現任何函式,自然就滿足空interface的定義了。加上Go語言的typeassertion,可以提供一般動態語言才有的ducktyping特性,而仍然能在compile中捕捉明顯的錯誤。
5.OO
Go語言本質上不是面嚮物件語言,它還是過程化的。但是,在Go語言中,你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這裡,不需要class,仍然可以繼承,仍然可以多型,但是速度卻快得多。因為本質上,OO在Go語言中,就是普通的struct操作。
6.Goroutine
這個幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不瞭解Goroutine,那麼你只需要知道,這玩意是超級輕量級的類似執行緒的東西,但透過它,你不需要複雜的執行緒操作鎖操作,不需要care排程,就能玩轉基本的並行程式。在Go語言裡,觸發一個routine和erlangspawn一樣簡單。基本上要掌握Go語言,以Goroutine和channel為核心的記憶體模型是必須要懂的。不過請放心,真的非常簡單。
7.更多現代的特性
和C比較,Go語言完全就是一門現代化語言,原生支援的Unicode,garbagecollection,Closures(是的,和functionalprogramminglanguage類似),function是firstclassobject,等等等等。
看到這裡,你可能會發現,我用了很多輕易,簡單,快速之類的形容詞來形容Go語言的特點。我想說的是,一點都不誇張,連Go語言的入門學習到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時代,對於Go語言,從入門到能夠上手做專案,最多不過半個月。Go語言給人的感覺就是太直接了,什麼都直接,讀原始碼直接,寫自己的程式碼也直接。