成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Go語言開發(fā)中常見的陷阱有哪些-創(chuàng)新互聯(lián)

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

站在用戶的角度思考問題,與客戶深入溝通,找到喀左網(wǎng)站設(shè)計(jì)與喀左網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋喀左地區(qū)。

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

初學(xué)者應(yīng)該注意的地方:

    大括號不能獨(dú)立成行。

    未使用變量錯(cuò)誤——對于全局變量和函數(shù)參數(shù)變量,是可以定義后不使用的。但是對于函數(shù)內(nèi)部變量來說,如果進(jìn)行定義后不進(jìn)行使用,編譯器會提示錯(cuò)誤。

    導(dǎo)入包未調(diào)用錯(cuò)誤——導(dǎo)入包后,如果不進(jìn)行調(diào)用,例如函數(shù),接口,結(jié)構(gòu)及變量等對象,那么會出現(xiàn)編譯錯(cuò)誤。這里建議使用空白表示符“_”來避免類似錯(cuò)誤。

    變量簡寫只適用于函數(shù)內(nèi)部。

    重新定義變量要使用簡寫聲明——你不能在一個(gè)獨(dú)立的語句中重新定義一個(gè)變量,但在復(fù)合變量場合是允許的。重新定義的變量需存在于同一區(qū)塊,否則會產(chǎn)生一個(gè)陰影變量。

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

    不能使用“nil”來定義一個(gè)沒有類型的變量——“nil”關(guān)鍵字可用于表示“0值”,例如在接口,函數(shù),指針等對象中。但如果把它用于定義一個(gè)沒有進(jìn)行類型聲明的變量,將會導(dǎo)致編譯錯(cuò)誤,因?yàn)榫幾g器無法確定變量類型。

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

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

    字符串不能為“nil”。

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

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

    單維度的切片和數(shù)——要創(chuàng)建一個(gè)動態(tài)多維度數(shù)組,要使用獨(dú)立切片。首先,要創(chuàng)建外層切片;然后,要對每個(gè)內(nèi)聯(lián)切片進(jìn)行分配。每個(gè)內(nèi)聯(lián)切片對于其它切片來說是獨(dú)立的。

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

    不可改變的字符串——如果想通過索引運(yùn)算符來更新一個(gè)字符串變量中的獨(dú)立字符是會出現(xiàn)錯(cuò)誤的,由于字符串是只讀的字節(jié)片。正確做法是使用一個(gè)單字節(jié)片進(jìn)行操作而不是轉(zhuǎn)成字符串類型進(jìn)行操作。

    字符串和字節(jié)片轉(zhuǎn)換——當(dāng)把字符串轉(zhuǎn)換為字節(jié)片時(shí),你得到是一份完整的原始數(shù)據(jù)。Go提供了一對[]byte to string,string to []byte的優(yōu)化轉(zhuǎn)換操作,以防止造成額外分配。

    字符串和索引運(yùn)算符——字符串中的索引運(yùn)算符返回的是字節(jié)值而不是字符。

    字符串不總是UTF8文本——字符串沒有被限定為UTF8文本。它們可以包含任何字節(jié)。只有當(dāng)使用字符串常數(shù)時(shí)才是UTF8文本。

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

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

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

    預(yù)置數(shù)據(jù)結(jié)構(gòu)運(yùn)算是不同步的。

    在range中的字符串迭代值。

    使用for range來進(jìn)行圖迭代。

    Switch語句的注意事項(xiàng):switch語句的case區(qū)塊默認(rèn)是隔斷的。

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

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

    運(yùn)算符優(yōu)先級差異。

    導(dǎo)出結(jié)構(gòu)域是沒有編碼。

    程序結(jié)束時(shí)沒有銷毀Go線程。

    當(dāng)目標(biāo)接收器就緒時(shí)就發(fā)送一個(gè)緩沖區(qū)通道返回。

    封閉通道發(fā)送的問題。

    使用“nil”通道。

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

中級開發(fā)者應(yīng)該注意的地方:

    關(guān)閉HTTP響應(yīng)。

    關(guān)閉HTTP連接。

    結(jié)構(gòu),數(shù)組,切片和圖的比較。

    可以使用==運(yùn)算符來比較不同的結(jié)構(gòu)變量。

    從異常中恢復(fù)。

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

    更新和引用切片,數(shù)組,及圖“range”的項(xiàng)值。

    切片的“隱藏”數(shù)據(jù)。

    切片數(shù)據(jù)的錯(cuò)誤。

    “變味”的切片。

    類型聲明和方法。

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

    for語句中的迭代變量和結(jié)束。

    延遲的函數(shù)調(diào)用參數(shù)求值。

    延遲函數(shù)調(diào)用執(zhí)行。

    錯(cuò)誤類型的判斷。

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

高級開發(fā)者應(yīng)該注意的地方:

    對值實(shí)例使用指針接收方法。

    更新圖值域。

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

    堆棧變量。

    GOMAXPROCS,并發(fā),并行化。

    搶先調(diào)度。

以“大括號不能獨(dú)立成行”為例:

錯(cuò)誤寫法:

[js] view plaincopy

    package main

    import "fmt"

    func main()

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

    fmt.Println("hello there!")

    }

編譯錯(cuò)誤提示:

/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語言開發(fā)中常見的陷阱有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:Go語言開發(fā)中常見的陷阱有哪些-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://jinyejixie.com/article16/gppdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)公司、定制開發(fā)、響應(yīng)式網(wǎng)站做網(wǎng)站、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
彩票| 临泽县| 临夏县| 都安| 伊金霍洛旗| 嵊泗县| 达拉特旗| 泗阳县| 克东县| 福海县| 常德市| 西宁市| 茶陵县| 板桥市| 上饶县| 沾益县| 旬邑县| 隆尧县| 明溪县| 南阳市| 镇远县| 西吉县| 正宁县| 江华| 凉山| 巴彦县| 榆树市| 神池县| 佛学| 伊宁市| 宽城| 博乐市| 蓬安县| 临安市| 灵丘县| 周至县| 资兴市| 正定县| 读书| 静宁县| 徐州市|