2015-06-04 44 views
0

我在導入數據包時看到了一個奇怪的語法:import _ fmt在輸入中使用_的作用是什麼

我知道import f fmt就像這個包的別名一樣工作,而且我知道_被用作一個不應該被關心的變量。

所以沒有獎勵猜測,在這裏我正在導入一個我不打算使用的包。事實上,這看起來就是這裏發生的事情。


我不明白的是爲什麼這可能會有幫助。如果我使用for _, v := range(arr){}我使用_,因爲我沒有選擇,我需要指定編譯器它不應該擔心我不會使用的變量。

但是,如果我不打算使用一個包,我只是省略它(如果它稍後可能會有用,我會對它進行評論)。但沒有理由將其編譯並添加到源代碼中。

那麼有沒有使用這種語法的任何一點,或者這只是一個無用的工件結合別名和未使用的變量?

回答

2

這意味着你想要導入它的副作用。它通常用於包含init的軟件包。當然你也可以正常導入它,但是_明確表明你只想要副作用。

Effective Go中搜索「導入副作用」進行討論。

一個非常常見的例子是net/http/pprof,它將一些新的處理程序附加到默認的多路複用器。像github.com/SlyMarbo/spdy這樣的軟件包以相同的方式使用它來靜默地修改默認的http客戶端。

+0

你能解釋一下我可以得到哪些副作用(除了提高執行文件的大小) –

+0

通常情況下,副作用是某些其他庫註冊的副作用。例如,大多數SQL數據庫驅動程序導入副作用,然後你可以使用sql.Open(「dbname」,「url」) –

相關問題