業務時間,斷斷續續學go已有一年了,體會到go語言其實并不是一門真正的高級語言,盡管它有高級語言的一些特性,如gc。但準確的定位,它其實還是一門介于低級和高級語言之間的語言。象java,c#,你不需要對底層的東西太過了解,例如陣列,ArrayList,字典,只需要知道功能就可以了,使用基本不會出問題,go就不行了,你必須對底層的東西要了解,不用說都搞得很明白,但至少要了解,了解哪些坑,坑太多了。
例如:
1:var i *int 光這一句,你就要知道它是nil指標,指向記憶體地址是0的,i==nil ,用它呼叫方法,賦值,都是錯的,因為go中0-255的記憶體地址是系統留用的,不允許任何操作。你要知道空指標!=nil,只有指標的動態型別和動態值都為空,才等于nil,空指標只是動態值為空,動態型別不為空,那它就!=nil,這在實際使用中有可能會出錯。
2: for k,v:=range t ,你要知道t只是個復制的副本,v只是每次復制值,地址不會變,所以不要用&v,否則永遠取到最后一次回圈v的地址。
3: 例如 切片,你從陣列中用s[i:j]來截取生成切片,其實切片底層也是陣列,和原陣列是共享的,所以你改了切片某個元素的值,對應原陣列某個元素的值也變了。
4:例如切片,用append加元素,超過容量,就會生成新的記憶體地址的切片,你如果原切片在main中,append在一個函式中,沒有回傳新切片,你會發生main中的老切片不會有任何變化。
5:例如一個函式 func test() r int {
defer func(){
......
}()
return 6
}
return r=6不是原子操作
它可以分解成3步
一:r=6
二:執行defer
三:空的return
.......
太多了,所以不要急著研究框架,研究別人代碼,有空先把基礎打好,否則做出來的東西,一旦有問題,查還不好找原因。我就遇到這事,一個go exe服務程式,總是運行幾天崩潰,最后折騰好久其實就是基礎沒掌握好的事。
uj5u.com熱心網友回復:
go 就火了一陣,然后就沒有然后了
uj5u.com熱心網友回復:
還好了,大企業用得不少,中小企業還是老樣子,用得不多,原先的技術都很成熟了,沒有換的必要。可能和go坑太多也有些關系。一開始覺得很好學,時間久了覺得未必這么容易。
uj5u.com熱心網友回復:
非也,據我所知目前招golang的公司有:
阿里,高德
騰訊 ,滴滴
百度
還需要多舉例嗎
uj5u.com熱心網友回復:
呵呵,我覺得主要是習慣的問題習慣了一種語言,轉另一種語言時,會沿用前一種語言的習慣
每種語言有相同的地方,也有不同的地方,這才有了語言的差異,否則統一成一種語言就好了
uj5u.com熱心網友回復:
任何一種技識訓者語言都有它照顧不到的地方,作為工具使用者,取其所需吧。歡迎關注下我,大家一起交流https://blog.csdn.net/u012737673
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/11758.html
標籤:go語言
