LoginSignup
0
0

[翻訳転載] Golang Tip #6: アンダースコア Import

Last updated at Posted at 2024-02-26

はじめに

本記事は以下のツイートの翻訳転載です。

アンダースコア(_) Import

多くのライブラリで、時折、次のようにアンダースコア(_)と組み合わせたimport文を見かけるかもしれない。

image

これは、名前参照をせずに、そのパッケージの初期化コード(init()関数)を実行しています。

例としてunderscoreパッケージを作成しました。ここにはinit()関数を定義してあります。

image

And in main(), using underscore import, even if I don't do anything, it still prints:
そしてmain()関数にて、アンダースコアimportを使用すると、それ以外に何もしなくてもunderscoreパッケージのinit()関数が実行されます。

image

おわりに

MySQLに接続する際などに見かけるなと思っていた。

import (
	"database/sql"
	"time"

	_ "github.com/go-sql-driver/mysql"
)

// ...

db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
	panic(err)
}
// See "Important settings" section.
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)

アンダースコアimportはinit()関数を実行する、と言うものなので、覚えやすいシンプルな機能かなと思う。

また、tools.goを導入する際も使うかもしれない。

気になったので実行順序を調べてみた。

package underscore

import "fmt"

func init() {
	fmt.Println("underscore.go: init")
}
package main

import (
	"fmt"
	_ "sample/underscore"
)

func init() {
	fmt.Println("main.go: init")
}

func main() {
	fmt.Println("main.go: main")
}
# go run .
underscore.go: init
main.go: init
main.go: main
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0