亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-01-18 10:16:25 來源:億速云 閱讀:102 作者:iii 欄目:數據庫

今天小編給大家分享一下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語言開發中常見的陷阱有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃园县| 陇南市| 静乐县| 军事| 新余市| 中卫市| 饶阳县| 新津县| 商水县| 徐水县| 贵溪市| 辽阳市| 芮城县| 林芝县| 商河县| 峨山| 固始县| 哈巴河县| 梁平县| 福海县| 蒙阴县| 临沧市| 肃南| 依安县| 浪卡子县| 奉贤区| 汤原县| 含山县| 常山县| 富阳市| 怀安县| 阜宁县| 屏东市| 嘉定区| 平邑县| 烟台市| 伽师县| 弋阳县| 航空| 玛多县| 芜湖县|