今天小編給大家分享一下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)
猜你還喜歡下面的內(nèi)容