久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Go語言開發中常見的陷阱有哪些

202次閱讀
沒有評論

共計 2358 個字符,預計需要花費 6 分鐘才能閱讀完成。

今天丸趣 TV 小編給大家分享一下 Go 語言開發中常見的陷阱有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Go 作為一種簡便靈巧的語言,深受開發者的喜愛。但對于初學者來說,要想輕松駕馭它,還得做好細節學習工作。

初學者應該注意的地方:

大括號不能獨立成行。

未使用變量錯誤——對于全局變量和函數參數變量,是可以定義后不使用的。但是對于函數內部變量來說,如果進行定義后不進行使用,編譯器會提示錯誤。

導入包未調用錯誤——導入包后,如果不進行調用,例如函數,接口,結構及變量等對象,那么會出現編譯錯誤。這里建議使用空白表示符“_”來避免類似錯誤。

變量簡寫只適用于函數內部。

重新定義變量要使用簡寫聲明——你不能在一個獨立的語句中重新定義一個變量,但在復合變量場合是允許的。重新定義的變量需存在于同一區塊,否則會產生一個陰影變量。

意外的變量——變量簡寫語法由于十分簡便,因此很容易會把它作為一個常規的指派操作。雖然可以通過編譯,但是其結果卻不是我們想要的。

不能使用“nil”來定義一個沒有類型的變量——“nil”關鍵字可用于表示“0 值”,例如在接口,函數,指針等對象中。但如果把它用于定義一個沒有進行類型聲明的變量,將會導致編譯錯誤,因為編譯器無法確定變量類型。

使用“nil”切片 (Slices) 和圖(Maps)——為“nil”切片添加對象是可以的,但對于圖來說,這樣會造成運行緩慢。

圖容量——可以在創建時設定圖的容量,但是不用對圖使用 cap()。

字符串不能為“nil”。

數組函數參數——對于 C /C++ 開發者來說,數組如同指針;當把數組傳入函數時,函數會引用相同的內存位置,所以能夠更新原始數據。但在 Go 中,數組是值,因此當把數組傳入函數時,得到的是原始數組數據的副本。因此如果想更新數組數據,這個造成問題。

切片和數組“范圍(range)”里的異常——在使用 for-in 或 foreach 語句時會遇到該問題。在 Go 中,range 的定義是有所不同的。它會產生兩個值:第一個為索引項,第二個說項的數據。

單維度的切片和數——要創建一個動態多維度數組,要使用獨立切片。首先,要創建外層切片;然后,要對每個內聯切片進行分配。每個內聯切片對于其它切片來說是獨立的。

訪問不存在的圖鍵——如果想知道一個給定圖記錄是否存在,應該通過檢查來自圖訪問操作的第二個值。

不可改變的字符串——如果想通過索引運算符來更新一個字符串變量中的獨立字符是會出現錯誤的,由于字符串是只讀的字節片。正確做法是使用一個單字節片進行操作而不是轉成字符串類型進行操作。

字符串和字節片轉換——當把字符串轉換為字節片時,你得到是一份完整的原始數據。Go 提供了一對[]byte to string,string to []byte 的優化轉換操作,以防止造成額外分配。

字符串和索引運算符——字符串中的索引運算符返回的是字節值而不是字符。

字符串不總是 UTF8 文本——字符串沒有被限定為 UTF8 文本。它們可以包含任何字節。只有當使用字符串常數時才是 UTF8 文本。

字符串長度——Go 中應使用 RuneCountInString()函數來取得字符串長度值而不是 len()函數。

多行切片,數組,和圖定義中缺少逗號。

log.Fatal 和 log.Panic:日志庫提供了不同的日志級別。

預置數據結構運算是不同步的。

在 range 中的字符串迭代值。

使用 for range 來進行圖迭代。

Switch 語句的注意事項:switch 語句的 case 區塊默認是隔斷的。

遞增和遞減:Go 中是不支持 i ++ 或 ++ i 的遞增 / 減操作的。

按位不是運算符:很多語言使用~ 來作為一元邏輯非運算符,而 Go 中則使用 ^。

運算符優先級差異。

導出結構域是沒有編碼。

程序結束時沒有銷毀 Go 線程。

當目標接收器就緒時就發送一個緩沖區通道返回。

封閉通道發送的問題。

使用“nil”通道。

有值接收器的方法不能用于改變原始值。

中級開發者應該注意的地方:

關閉 HTTP 響應。

關閉 HTTP 連接。

結構,數組,切片和圖的比較。

可以使用 == 運算符來比較不同的結構變量。

從異常中恢復。

可以使用 recover()來捕獲 / 攔截異常。

更新和引用切片,數組,及圖“range”的項值。

切片的“隱藏”數據。

切片數據的錯誤。

“變味”的切片。

類型聲明和方法。

for switch 和 for select 代碼塊的終止。

for 語句中的迭代變量和結束。

延遲的函數調用參數求值。

延遲函數調用執行。

錯誤類型的判斷。

斷開的 Go 線程和資源泄漏。

高級開發者應該注意的地方:

對值實例使用指針接收方法。

更新圖值域。

“nil”接口和“nil”接口值。

堆棧變量。

GOMAXPROCS, 并發,并行化。

搶先調度。

以“大括號不能獨立成行”為例:

錯誤寫法:

[js] view plaincopy

package main

import fmt

func main()

{//error, can t have the opening brace on a separate line

fmt.Println(hello there!)

}

編譯錯誤提示:

/tmp/sandbox826898458/main.go:6: syntax error: unexpected semicolon or newline before {

正確寫法:

[js] view plaincopy

package main

import fmt

func main() {

fmt.Println(works!)

}

以上就是“Go 語言開發中常見的陷阱有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-15發表,共計2358字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 伊宁市| 高州市| 岐山县| 清新县| 礼泉县| 武山县| 苏州市| 宣化县| 五台县| 迭部县| 广元市| 邵阳县| 北票市| 黄龙县| 通州市| 阳山县| 嘉义县| 大余县| 阳东县| 东光县| 和龙市| 眉山市| 毕节市| 襄垣县| 江阴市| 孟州市| 额尔古纳市| 赞皇县| 抚松县| 汽车| 文安县| 唐山市| 读书| 贵南县| 云南省| 龙门县| 广饶县| 唐山市| 凤山县| 三河市| 兴宁市|