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會員
12內容數
量化研究心得,社會觀察,自我反思
你可能也想看
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 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