importのオプション
概要
import宣言についてはこちらで解説をしていますが、この宣言には「別名」
「パッケージ名記述省略」「使用不可」のオプション設定があります。
このオプションを使用することで問題を回避出来たり、
冗長なコードをシンプルにすることができます。
別名
別名はimport予定のパッケージ名が長い場合や
名前の重複を回避するために使用します。
別名の書式
書式 |
import 別名 パッケージディレクトリのパス |
具体例 |
import f "fmt" |
package main
import f "fmt"
func main() {
f.Println("パッケージ名変更")
}
上のコードのように別名を使用した場合は別のパッケージ名で
パッケージを使用することができます。
パッケージ名記述省略
パッケージ名記述省略はimportしたパッケージの関数などを使用する際に必要な
パッケージ名の記述を省略することができます。
このオプションでは「.」を使用します。
別名の書式
書式 |
import . パッケージディレクトリのパス |
具体例 |
import . "fmt" |
package main
import . "fmt"
func main() {
Println("パッケージ名記述省略")
}
上のコードのように省略を使用した場合はパッケージ名の名前を
書かなくともパッケージを使用することができます。
省略の注意点
省略はパッケージ名を書かなくとも関数が使用できるようになるので
大変便利な機能に見えますが、名前の重複問題が発生する可能性があることを
理解しておいてください。
// pkg01.go
package pkg01
import "fmt"
func MyPrint() {
fmt.Println("abc")
}
// main.go
package main
import "fmt"
import . "./pkg01"
func MyPrint() {
fmt.Println("abcdefg")
}
func main() {
MyPrint()
}
上のコードでは2つのソースファイルにMyPrint関数があり、
main.goではpkg01のパッケージ名を省略しています。
厄介なことに、このケースではエラーにはならずプログラムは実行されます。
ただ、main.goのMyPrintとpkg01.goのMyPrintのどちらが呼ばれるかが
非常に分かりづらい状態になります。
上の場合では「abcdefg」が出力されますが、
状況によっては「abc」が出力されることもあります。
このような事が起こりえるので省略のオプションを使うときは
十分に注意をして下さい。
使用不可
使用不可はimportは行いますが、このソースファイル内では
importしたパッケージは使用できないことを表明する機能です。
このオプションは「_」を使用します。
package main
import _ "fmt"
func main() {
fmt.Println("Hello World") // エラー
}
上のコードを実行するとfmt.Printlnの行でエラーになります。
Go言語では「_」は使用しないことを示す記号として使われており、
importでもこのオプションを使用すればimportしたパッケージを
使用しなことを明示します。
使用箇所
「_」を使用するポイントですが、パッケージはimportされた際に
呼び出される初期化関数があり、その初期化だけを行いたい場合に利用します。