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された際に
呼び出される初期化関数があり、その初期化だけを行いたい場合に利用します。