golang的空標(biāo)識(shí)符理解
空白符(blank identifier)
空白符的產(chǎn)生可能是因?yàn)間o不允許變量聲明了但不使用。既然不想使用,何必聲明變量呢,那就將變量用空白符代替,反正空白符就是用來(lái)拋棄的。
我們有時(shí)候看到這樣的golang代碼:
import _ "net/http/pprof"
或
for _, c := range "11234" { log.Println(c) }
或
var _ io.Reader = (* XXX)(nil) //全局變量
或
var _ = Suite(&HelloWorldTest{})
代碼中_很獨(dú)特的樣子:說(shuō)是變量吧,但它在同一作用域可以多次被定義;說(shuō)是類型吧,寫法上又不像。
那它到底是何方神圣呢?
其實(shí)官方文檔有定義和介紹,它叫Black Identifier
,中文翻譯為空標(biāo)識(shí)符??諛?biāo)識(shí)符不是普通變量,而是語(yǔ)言提供的一種特殊處理,它能避免某個(gè)變量起名,同時(shí)也可以在賦值時(shí)舍棄某個(gè)值。
空標(biāo)識(shí)符一般用于4種場(chǎng)合,正對(duì)應(yīng)上面例子的4段代碼。
1. 引入某包只執(zhí)行包中的init函數(shù),但本包沒(méi)有直接引用該包任何變量或函數(shù),使用import _避免編譯錯(cuò)誤;
2. 函數(shù)有多返回值,忽略其中某些返回值。類似c++11 std::ignore在std::tie中的運(yùn)用;
3. 編譯期檢查,比如某類型有沒(méi)有實(shí)現(xiàn)某接口的檢查;
4. 想在main之前執(zhí)行某段代碼,當(dāng)然用init也可以。
示例 blank_identifier.go
package main import "fmt" func main() { var i1 int var f1 float32 i1, _, f1 = ThreeValues() fmt.Printf("The int: %d, the float: %f \n", i1, f1) } func ThreeValues() (int, int, float32) { return 5, 6, 7.5 }
輸出結(jié)果:
The int: 5, the float: 7.500000
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Golang實(shí)現(xiàn)協(xié)程超時(shí)控制的方式總結(jié)
我們知道,go協(xié)程如果不做好處理,很容易造成內(nèi)存泄漏,所以對(duì)goroutine做超時(shí)控制,才能有效避免這種情況發(fā)生,本文為大家整理了兩個(gè)常見(jiàn)的Golang超時(shí)控制方法,需要的可以收藏一下2023-05-05Go語(yǔ)言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)Json序列化反序列化以及文件讀寫的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11Go中g(shù)in框架的*gin.Context參數(shù)常見(jiàn)實(shí)用方法
*gin.Context是處理HTTP請(qǐng)求的核心,ctx代表"context"(上下文),它包含了處理請(qǐng)求所需的所有信息和方法,例如請(qǐng)求數(shù)據(jù)、響應(yīng)構(gòu)建器、路由參數(shù)等,這篇文章主要介紹了Go中g(shù)in框架的*gin.Context參數(shù)常見(jiàn)實(shí)用方法,需要的朋友可以參考下2024-07-07