在 Go 語言中,每個 package 都可以有一個特殊的 init()
函式,當該 package 被匯入時,這個函式就會自動執行。
對於 main
package 而言,在進入 main()
之前,會先執行它本身的 init()
。
init()
函式,其餘未被使用的內容並不會載入。那什麼情況會用到 import _ "..."
呢?
當只需要載入某個 package 的初始化邏輯(也就是 init()
),但不打算在程式中直接使用該 package 提供的函式或物件時,就可以在 import 前加上一個底線 _
。
這樣的寫法可以避免編譯器報錯「import 但未使用」,同時又能讓初始化邏輯生效。
範例:使用 GORM 搭配 MySQL Driver
以使用 GORM 為例,若只需要使用 MySQL 作為資料庫後端,官方建議這樣匯入:
import (
_ "github.com/go-sql-driver/mysql" // 執行 init(),但不直接使用
"github.com/jinzhu/gorm"
)
這段程式碼的作用是:
GORM 在背後會透過 init()
的方式自動註冊 MySQL driver,開發者不需手動處理,只需匯入一次即可生效。
總結
import _ "..."
是 Go 語言中一種非常實用的語法技巧,常見於:
- 匯入資料庫 driver
- 註冊 middleware 或 side effect plugin
- 觸發初始化程式碼但不直接使用內容