Goチュートリアルと、私が見たGoコードのほとんどでは、パッケージは次のようにインポートされます。
import (
"fmt"
"os"
"launchpad.net/lpad"
...
)
しかし http://Bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go では、gocheckパッケージは.
(ピリオド)でインポートされます:
import (
"http"
. "launchpad.net/gocheck"
"launchpad.net/lpad"
"os"
)
.
(期間)の重要性は何ですか?
インポートされたパッケージの識別子は、修飾子なしでローカルファイルブロックで参照できます。
名前の代わりに明示的なピリオド(。)が表示される場合、パッケージのエクスポートされたすべての識別子は現在のファイルのファイルブロックで宣言され、修飾子なしでアクセスできます。
関数Sinをエクスポートするpackage句package mathを含むパッケージをコンパイルし、コンパイルされたパッケージを「lib/math」で識別されるファイルにインストールしたと仮定します。この表は、さまざまなタイプのインポート宣言後にパッケージをインポートするファイルでSinにアクセスする方法を示しています。
Import declaration Local name of Sin
import "lib/math" math.Sin
import M "lib/math" M.Sin
import . "lib/math" Sin
Pythonから来た人の例えは次のとおりです。
import "os"
は、Pythonのimport os
とほぼ同等ですimport . "os"
は、Pythonのfrom os import *
とほぼ同等ですどちらの言語でも、後者を使用することは一般的に嫌われていますが、それを行うには十分な理由があります。
これはテストでのみ使用してください。
Mockgenなどでモックコードを生成し、パッケージコードをインポートし、テストパッケージalsoがパッケージコードをインポートすると、次のようになります。循環依存関係(golangは、ユーザーが解決方法を決定できるようにすることを選択します)。
ただし、テストパッケージ内でテストするパッケージにドット表記を使用すると、それらは同じパッケージとして扱われ、循環する依存関係はありません!