您好,登錄后才能下訂單哦!
前言
Go語言是一門很簡單的語言,它為我們做了很多的決定,比如很多在其他語言中不推薦使用的編碼風格在Go是不允許的。比如: 變量或者包聲明或導入后沒有使用是無法編譯通過的。 它的編譯只有Fatal沒有Warning,這對于代碼質量是很有好處的。在其他語言中 最佳實踐也是編寫warning-free的代碼。Go把這個最佳實踐放到了語言級別。
Go中的空標示符(blank indentifier): _
剛開始在看到Go中的空標示符是以為它只是一種約定,因為下劃線看起來比那么的 顯眼,而普通變量又不太可能只使用一個下劃線來命名,在其他語言中我們不想使用 一個變量的話很簡單忽略之就可以了,而如果對一個函數的返回值不感興趣的話, 不對返回值賦值即可。
先記錄下結論:空標示符不是一個普通變量或標示符,而是一個特殊的標示符, 對于這種類型的標示符綁定表達式時不進行真正的綁定。
這是什么意思呢?也就說比如將一個值賦值給空操作符是不會進行值綁定的。
package main import ( _ "io" // 如果不重名名包為_ 而在代碼中沒有使用這個包會編譯不通過 // 這樣導入一個包是有副作用的,導入一個包后會執行包的init()方法, // 如果只是為了避免編譯不通過而綁定到_是不推薦的做法。 "fmt" ) func getMulti() (int, int) { return 3, 4 } func main() { _ = 20 // 綁定沒有作用,不會報錯 // _ := 10 // 編譯不通過,因為表達式左邊沒有一個有效的新的標示符 // no new variables on left side of := x, _ := getMulti() fmt.Printf("%d\n", x) // fmt.Printf("%d\n", _) 這樣是編譯不通過的,因為_并不能被賦值 // 編譯 "cannot use _ as value" }
總結
空標示符不是普通標示符,是一個語言級別的標示符,通常用來:
顯式的忽略函數或其他多值賦值表達式中的某些的返回值,多值表達式通常有:
1、函數的多個返回值
2、range循環中的key-value值
3、多值賦值,比如: x, y, z := 10, 20, 30, 不過這種情況比較小
或者導入包不使用包而只利用包的初始化函數的副作用。但是不推薦用這種方式 ,來繞過因為包未被使用而編譯不通過的問題
本文這里只是做一個筆記,其實Go的語言規范中寫的還是很詳細的。對于一些有疑惑的地方一翻手冊就會發現答案。這也是一門語言小的好處,歧義會非常少。希望本文對大家學習Go語言有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。