3 回答

TA貢獻1848條經驗 獲得超10個贊
我正在編寫一個調整圖像大小的程序。我希望它能夠識別不同格式的圖像,如JPEG、PNG、GIF并將它們轉換為JPEG。
所以除了image和image/jpeg包,我還必須導入image/png并且image/gif只注冊它們各自的解碼器。
如果我沒有導入這些,縮放器將只能讀取JPEG圖像。
package main
import(
"image"
"image/jpeg" // I wanted to export the images as JPEG
_ "image/png"
_ "image/gif"
)
// ...
image包中的相關文檔:
解碼任何特定的圖像格式需要預先注冊解碼器功能。作為初始化該格式的包的副作用,注冊通常是自動的,因此,要解碼 PNG 圖像,它就足夠了:
import _ "image/png"

TA貢獻1851條經驗 獲得超3個贊
這是因為init 函數
每個源文件都可以定義自己的 niladicinit函數來設置所需的任何狀態。(其實每個文件可以有多種init功能。)
finally 的意思是 finally:init在包中的所有變量聲明都評估了它們的初始值設定項之后調用,并且只有在所有導入的包都已初始化之后才評估它們。
這就是“ Go 中 import 語句前面的下劃線是什么意思”中提到的go-sqlite3 的工作原理。
func init() {
sql.Register("sqlite3", &SQLiteDriver{})
}
你在“理解 Golang Packagese ”中有另一個例子:
在某些情況下,我們可能只需要導入一個包來調用它的init方法,而我們不需要調用包的其他方法。
如果我們導入了一個包并且沒有在程序中使用包標識符,Go 編譯器將顯示錯誤。
在這種情況下,我們可以使用一個空白標識符 ( _) 作為包別名,這樣編譯器會忽略不使用包標識符的錯誤,但仍然會調用該init函數。
- 3 回答
- 0 關注
- 310 瀏覽
添加回答
舉報