Go 語言小知識:import 前的底線 _ 是做什麼用的?

更新於 發佈於 閱讀時間約 2 分鐘

在 Go 語言中,每個 package 都可以有一個特殊的 init() 函式,當該 package 被匯入時,這個函式就會自動執行。

對於 main package 而言,在進入 main() 之前,會先執行它本身的 init()

而在 import 其他 package 時,也只會執行該 package 的 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
  • 觸發初始化程式碼但不直接使用內容
留言
avatar-img
留言分享你的想法!
avatar-img
虎斑貓的散記
5會員
11內容數
量化研究心得,社會觀察,自我反思
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
成功加入Anytype之後就可以開始探索這一個開源的筆記軟體了^_^ 開始Anytype之前..... 1.刪除所有初始物件 2.思考自己的使用需求 3.不著急學會所有功能
Thumbnail
成功加入Anytype之後就可以開始探索這一個開源的筆記軟體了^_^ 開始Anytype之前..... 1.刪除所有初始物件 2.思考自己的使用需求 3.不著急學會所有功能
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
MacOS 先下載Homebrew,然後輸入底下指令: brew install go 確認是否安裝完成 go version 環境設定 export GOPATH=$HOME/go
Thumbnail
MacOS 先下載Homebrew,然後輸入底下指令: brew install go 確認是否安裝完成 go version 環境設定 export GOPATH=$HOME/go
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News